为什么我不需要在gcc 4.6中包含STL头文件?

时间:2011-10-28 12:22:05

标签: c++ compiler-construction header include c++11

我在c ++ 0x模式下使用gcc 4.6。我注意到,如果我使用向量和其他STL容器但不包含其关联的头文件,我似乎没有任何编译器错误。这是设计的吗?什么是首选做法?

我总是使用显式指定std命名空间...但我一直认为即使指定了命名空间也必须包含标题。

如果最好包含标题,这似乎是一个奇怪的默认值,因为我怀疑在没有编译器帮助的情况下我会100%正确地处理事情。

2 个答案:

答案 0 :(得分:3)

您应始终包含代码所需的所有标准标头。

不幸的是,标准标题允许包含其他标准标题,在这种情况下,您可能会发现自己可以使用某些内容而不包含正确的标题。您不能依赖它,如果您更改为其他库实现,您可能会发现必须修复包含。

没有简单的方法可以确保您的包含正确无误;最简单的选择是测试您的代码是否编译了您感兴趣的所有库实现。

答案 1 :(得分:3)

给予 GCC 的选项-H(即在您的情况下为g++)使GCC打印出包含的每个标题。它可以帮助您找出文件是如何被包含的(即从哪个其他标题)。而且我不认为GCC神奇地包含了一些stdc ++标题。