C++ C++;为什么我们在头文件中包含所有声明 #包括
当你这样做,它成为通过预处理器的源,我们的文件将是5k。编译器不会做所有这些声明,对吗?(总有一些东西我们根本不用)C++ C++;为什么我们在头文件中包含所有声明 #包括,c++,C++,当你这样做,它成为通过预处理器的源,我们的文件将是5k。编译器不会做所有这些声明,对吗?(总有一些东西我们根本不用) |链接器或编译器是否阻止此操作?**所以当您在头文件中包含所有声明文件时** 提高构建时间 在没有定义源代码的情况下链接代码 避免将所有内容标记为“内联” 编译器只看到声明,因为它知道定义可能在某个地方,然后在链接时使用所有定义 经验法则是:头文件应该包含声明,源文件应该包含定义 两类声明: 声明:声明将名称引入范围。一般来说,作用域可以是整个.cpp文件,也可以是由{}分隔的任
|链接器或编译器是否阻止此操作?**所以当您在头文件中包含所有声明文件时**
经验法则是:头文件应该包含声明,源文件应该包含定义 两类声明:
你可以有一百万次申报。对于模板声明,除非模板被显式专门化,否则只生成所需的专门化。所以如果你不使用任何,就没有专门化。对于非模板声明,是否包含头并不重要。在编译过程中,只需将库包含在构建中,即可导入符号。额外的头文件所能做的唯一危害就是降低编译速度。无论如何,好的编译器在配置时能够从中删除未使用的符号。@Eljay那么,如果我在代码中声明的内容没有被使用,编译器会忽略它,对吗?@PyroSoft Define“used”。编译器肯定会从包含的头中看到很多声明,并将对它们进行解析、类型检查等(这可能会通过预编译的头进行优化,但实际上并不重要)。但是,如果以后不使用它们,这些声明将不会影响生成的可执行文件。从这个意义上说,它们被忽略了。问题不是为什么包含声明,而是为什么包含所有声明,以及编译器/链接器如何处理未使用的头代码。这是相当简单的。例如,类定义属于头文件。
#include <iostream>
extern int y; // declares y, but does not define it. y is defined elsewhere,
// but the program can now use it since it knows what it is (an integer)
double someFunction( double, int );