Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在每个类中包含相同的头_C++_Stl_Header Files - Fatal编程技术网

C++ 在每个类中包含相同的头

C++ 在每个类中包含相同的头,c++,stl,header-files,C++,Stl,Header Files,我在我的项目的所有代码文件中都包含了几个STL头,比如list和vector。我知道对于我自己的头文件,我应该使用include-guards,但是对于这个场景,如果它们不是我定义的呢 在我的每一个文件中都包含相同的头是否不好?每次包含时是否都会受到性能惩罚?作为一般规则, 只有在源文件需要时,才能包含头文件。 Include guards可以防止同一个头文件多次包含在同一个翻译单元中,并防止链接错误。当然,标准库头文件也有自己的头文件 但是,请注意,如果在不需要头文件的源文件中包含头文件,则可

我在我的项目的所有代码文件中都包含了几个STL头,比如list和vector。我知道对于我自己的头文件,我应该使用include-guards,但是对于这个场景,如果它们不是我定义的呢

在我的每一个文件中都包含相同的头是否不好?每次包含时是否都会受到性能惩罚?

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

Include guards可以防止同一个头文件多次包含在同一个翻译单元中,并防止链接错误。当然,标准库头文件也有自己的头文件

但是,请注意,如果在不需要头文件的源文件中包含头文件,则可能会增加编译量并导致名称空间名称的污染。

一般来说,
只有在源文件需要时,才能包含头文件。

Include guards可以防止同一个头文件多次包含在同一个翻译单元中,并防止链接错误。当然,标准库头文件也有自己的头文件


但是,请注意,如果在不需要头文件的源文件中包含头文件,则可能会增加编译量并导致名称空间名称的污染。

没有性能成本。标准头文件有自己的include-guard,所有include-guard都由预处理器优化,因此文件不会每次都重新加载

正确性和可维护性始终是首要考虑的问题……当您重新排列文件并出现“未定义标识符”错误或更糟的错误时,您需要节省多少编译时间来弥补修复工作所花费的时间


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

< P>不存在性能成本。标准头文件有自己的include-guard,所有include-guard都由预处理器优化,因此文件不会每次都重新加载

正确性和可维护性始终是首要考虑的问题……当您重新排列文件并出现“未定义标识符”错误或更糟的错误时,您需要节省多少编译时间来弥补修复工作所花费的时间


编辑:从所有头文件中包含相同的标准头文件,不需要增加性能成本。从源文件中包含额外的标准头会带来一些性能代价。这个问题有点含糊不清……但不管怎样,C++编译中的一个非常昂贵的部分通常是模板实例化,而不是解析文本。

您是否宁愿“由于两个不同的文件头包含了一个符号而定义了两种不同的方式”,或者您宁愿看到一个错误吗?如果没有
使用名称空间
,这种情况无论如何都不会发生,你不应该这样做,但即使假设这样,这种情况也值得警惕。@Potatoswatter:为什么一个人最终会在两个不同的文件中以两种不同的方式定义一个符号?只要它们是标准的库符号,并且人们不打算故意开枪自杀,就不应该发生这种情况&如果真的发生了,就应该跟踪并纠正……更简洁地说:名称空间污染不是由于标题太多造成的,而是由于在名称空间范围内定义不正确造成的。您愿意吗“走开“由于包含的头不同,在两个不同的文件中以两种不同的方式定义了一个符号,或者您希望看到错误?如果没有
使用名称空间
,这种情况无论如何都不会发生,你不应该这样做,但即使假设这样,这种情况也值得警惕。@Potatoswatter:为什么一个人最终会在两个不同的文件中以两种不同的方式定义一个符号?只要它们是标准的库符号,并且一个人不打算故意开枪自杀,那就根本不应该发生&如果真的发生了,就应该追踪并更正……更简洁地说:名称空间污染不是太多标题的影响,这是在名称空间范围中定义不正确的结果。我完全确定您包括标准库标题,而不是STL标题…我完全确定您包括标准库标题,而不是STL标题。。。