我在 c++0x 模式下使用 gcc 4.6。我注意到,如果我使用向量和其他 STL 容器但不包含其关联的头文件,则似乎不会出现任何编译器错误。这是设计使然吗?首选做法是什么?
我总是使用显式指定 std 命名空间...但我一直认为即使指定了命名空间也必须包含标头。
如果最好包含标头,这似乎是一个奇怪的默认值,因为如果没有编译器的帮助,我是否能 100% 正确地完成事情是值得怀疑的。
您应该始终包含代码所需的所有标准标头。
不幸的是,标准标头允许包含其他标准标头,在这种情况下,您可能会发现自己可以使用某些不包含正确标头的东西。您不能依赖它,并且如果您更改为不同的库实现,您可能会发现必须修复您的包含内容。
没有简单的方法可以确保您始终获得正确的包含内容;最简单的选择是测试您的代码是否可以使用您感兴趣的所有库实现进行编译。
给
GCC的选项
-H
(即在您的情况下为g++
)使GCC打印它所包含的每个标题。它可以帮助您找出文件是如何被包含的(即来自哪个其他标头)。我不认为 GCC 神奇地包含了一些 stdc++ 标头。