2012-04-15 65 views
1

我在我的项目的所有代码文件中包含几个STL头文件,如列表和向量。我知道我自己的标题,我应该使用包括守卫,但是当它们没有被我定义时,这种情况怎么样?在每个类中包含相同的头文件

在我的每个文件中包含相同的标题是不好的?每次包含都会有性能损失吗?

+1

我完全相信你有*标准库*头,不* STL *头... – Griwes 2012-04-15 10:21:31

回答

1

没有性能成本。标准头文件具有自己的包含防护,并且所有包含防护都由预处理器优化,因此文件实际上并未每次都重新加载。

正确性和可维护性始终是第一个问题......当您重新安排文件并获取“未定义标识符”错误或更糟时,您必须保存多少编译时间才能弥补修复工作的工作量!

编辑:从所有头文件中包含相同的标准头文件不需要性能成本。从源文件中添加额外的标准头文件会有一些性能成本。这个问题有点模棱两可......但无论哪种方式,C++编译中非常昂贵的部分通常是模板实例化,而不是解析文本。

0

作为一般规则,
只有源文件需要时才能包含头文件。

包括警卫会阻止相同的头文件被多次包含在同一个翻译单元中,并且防止链接错误,但是,Ofcourse标准库头文件有自己的头文件。

但是,请注意,如果在不需要它们的源文件中包含头文件,那么它可能会增加编译&导致名称空间名称受到污染。

+0

你愿意“脱身”与具有定义在两个不同的文件两种不同方式的象征,由于不同的头包,或者你想看到一个错误?如果没有'使用命名空间',它不应该发生,你不应该这样做,但即使假设,情况也是值得一提的。 – Potatoswatter 2012-04-15 04:15:46

+0

@Patatoswatter:为什么最终会在两个不同的文件中以两种不同的方式定义一个符号?只要它们是标准的图书馆符号,并且不打算故意自己拍摄,那根本不应该发生,如果它发生了,它应该被追踪并纠正。 – 2012-04-15 04:20:41

+0

...更简洁:名称空间污染不是太多头文件的影响,它是在名称空间范围内不恰当地定义事物的结果。 – Potatoswatter 2012-04-15 04:22:33