我正在阅读Deitel的书中的C ++,这本书达到了这一部分:
某些函数(例如main)不是类的成员。这些功能称为全局功能。我们从头开始介绍各种功能,以介绍不属于特定类的全局功能的概念。
在说了这个块之后(该块本身完全在Math库中),它引入了一些函数,例如属于cmath标头的sqrt(),最后它说所有属于cmath的函数都是全局的!
所以,这是我的问题:在最上面,我们说所有不属于任何类的函数都是全局函数。但随后它说与cmath相关的所有功能都是全局的!那不是矛盾吗?我的意思是,如果我们接受这一点,则意味着并非所有标头都是class。这样对吗?
头文件本身并不会引入新的作用域或名称空间,甚至不会引入任何类。
预处理#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不是类的一部分,而是全局函数。
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |