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



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

因此,这是我的问题:在顶层,我们说所有不属于任何类的函数都是全局函数;但是然后它说与 cmath 相关的所有功能都是全局的!那不是矛盾吗?
我的意思是,如果我们接受这一点,则意味着并非所有 header 都是类。这样对吗?

c++ - 所有的C++ header 都是类吗?-LMLPHP

最佳答案

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

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

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

一个非常简化的示例。

假设您有一个头文件a.h,其中包含一个函数声明:

void a_function();

然后,您将获得一个包含头文件的源文件:
#include "a.h"

int main()
{
    a_function();
}

预处理后,翻译单元将如下所示:
void a_function();

int main()
{
    a_function();
}

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

关于c++ - 所有的C++ header 都是类吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57884219/

10-11 15:59