我正在阅读Deitel的书中的C++,这本书达到了这一部分:
在说了这个块之后(该块本身完全在Math库中),它介绍了一些函数,例如 cmath header 中的 sqrt(),最后它说,属于 cmath 的所有函数都是全局的!
因此,这是我的问题:在顶层,我们说所有不属于任何类的函数都是全局函数;但是然后它说与 cmath 相关的所有功能都是全局的!那不是矛盾吗?
我的意思是,如果我们接受这一点,则意味着并非所有 header 都是类。这样对吗?
最佳答案
头文件本身并不会引入新的作用域或 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/