C++ C++;为什么我们在头文件中包含所有声明 #包括

C++ C++;为什么我们在头文件中包含所有声明 #包括,c++,C++,当你这样做,它成为通过预处理器的源,我们的文件将是5k。编译器不会做所有这些声明,对吗?(总有一些东西我们根本不用) |链接器或编译器是否阻止此操作?**所以当您在头文件中包含所有声明文件时** 提高构建时间 在没有定义源代码的情况下链接代码 避免将所有内容标记为“内联” 编译器只看到声明,因为它知道定义可能在某个地方,然后在链接时使用所有定义 经验法则是:头文件应该包含声明,源文件应该包含定义 两类声明: 声明:声明将名称引入范围。一般来说,作用域可以是整个.cpp文件,也可以是由{}分隔的任

当你这样做,它成为通过预处理器的源,我们的文件将是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 );