我在项目的所有代码文件中都包含了几个 STL 标头,例如列表和矢量。我知道我自己的标题应该使用包含防护,但是当它们不是由我定义时,对于这种情况怎么办?
在我的每个文件中包含相同的标题是否很糟糕?每次包含它都会有性能损失吗?
我在项目的所有代码文件中都包含了几个 STL 标头,例如列表和矢量。我知道我自己的标题应该使用包含防护,但是当它们不是由我定义时,对于这种情况怎么办?
在我的每个文件中包含相同的标题是否很糟糕?每次包含它都会有性能损失吗?
没有性能成本。标准头文件有自己的包含保护,并且所有包含保护都由预处理器优化,因此文件实际上不会每次都重新加载。
正确性和可维护性始终是首要问题……当您重新排列文件并出现“未定义的标识符”错误或更糟时,您必须节省多少编译时间来弥补修复工作所花费的工作!
编辑:从所有头文件中包含相同的标准头文件并没有性能成本。从源文件中包含额外的标准头会产生一些性能成本。这个问题有点模棱两可……但无论哪种方式,C++ 编译中真正昂贵的部分通常是模板实例化,而不是解析文本。
作为一般规则,
您必须仅在源文件需要时才包含头文件。
包含保护可以防止同一个头文件多次包含在同一个翻译单元中,并防止链接错误,但是,当然标准库头有自己的。
但是,请注意,如果您在不需要它们的源文件中包含头文件,那么它可能会增加您的编译并导致命名空间名称的污染。