所有的C ++标头都是类吗?

Far*_*ian 8 c++

我正在阅读Deitel的书中的C ++,这本书达到了这一部分:

某些函数(例如main)不是类的成员。这些功能称为全局功能。我们从头开始介绍各种功能,以介绍不属于特定类的全局功能的概念。

在说了这个块之后(该块本身完全在Math库中),它引入了一些函数,例如属于cmath标头的sqrt(),最后它说所有属于cmath的函数都是全局的!

所以,这是我的问题:在最上面,我们说所有不属于任何类的函数都是全局函数。但随后它说与cmath相关的所有功能都是全局的!那不是矛盾吗?我的意思是,如果我们接受这一点,则意味着并非所有标头都是class。这样对吗?

C ++ Deitel书

Som*_*ude 8

头文件本身并不会引入新的作用域或名称空间,甚至不会引入任何类。

预处理#include指令中包含的头文件基本上按原样复制粘贴到转换单元中,以供编译器的后续阶段进行解析。

简而言之,源文件和头文件之间确实没有区别。两者都可以包含函数或类的声明或定义。


一个非常简化的示例。

假设您有a.h一个包含单个函数声明的头文件:

void a_function();
Run Code Online (Sandbox Code Playgroud)

然后,您将获得一个包含头文件的源文件:

#include "a.h"

int main()
{
    a_function();
}
Run Code Online (Sandbox Code Playgroud)

预处理后,翻译单元将如下所示:

void a_function();

int main()
{
    a_function();
}
Run Code Online (Sandbox Code Playgroud)

该函数a_function不是类的一部分,而是全局函数。