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