为什么 mac 上不需要包含智能指针?

Why do smart pointers don't need to be included on mac?

我在 mac 上偶然发现了一个令人惊讶的行为。当我使用智能指针并使用 apple 的 clang 进行编译时,即使我不包含内存 header,它也会编译。 当我从终端编译或使用 IDE 时会发生这种情况。当我使用 clion 时,它不会通知我缺少 header 或任何东西。 当我尝试在 Linux 上构建时,这会导致问题,因为缺少 header。有没有办法强制 clion 或编译器对此更加严格?

这里的问题是 C++ 标准只要求适当的 #include 将您想要的功能引入编译单元。这是设计使然,甚至允许编译器编写者将一些 C++ 标准库功能硬编码到编译器中!

许多 C++ 标准库实现 #include headers 隐含地引入了 C++ 标准库功能。有些人在这方面比其他人更糟糕。

除了严格使用强制性的 #includes 之外,您实际上无能为力;您几乎可以通过反复试验来解决的问题。