我偶然发现了Mac上令人惊讶的行为。当我使用智能指针并使用Apple的clang进行编译时,即使不包含内存标头,它也会进行编译。 从终端编译或使用IDE时会发生这种情况。当我使用clion时,它不会通知我缺少的标题或其他内容。 当我尝试在Linux上进行构建时,这会导致问题,因为缺少标头。有什么办法可以迫使clion或编译器对此做更严格的规定?
答案 0 :(得分:3)
这里的问题是C ++标准仅要求适当的#include
将所需的功能引入编译单元。这是设计使然,甚至允许编译器编写者将某些C ++标准库功能硬编码到编译器中!
许多C ++标准库实现#include
头文件隐式地引入了C ++标准库功能。在这方面,有些人比其他人更糟糕。
除了严格使用授权的#include
之外,您实际上无能为力。您可以通过反复尝试几乎解决的问题。