1. 头文件中常包含的内容:
- 函数原型
- 使用#define或const定义的符号常量
- 结构声明
- 类声明
- 模板声明
- 内联函数
2. 五中变量存储方式
存储描述 | 持续性 | 作用域 | 链接性 | 如何声明 |
自动 | 自动 | 代码块 | 无 | 在代码中(可以使用关键字auto) |
寄存器 | 自动 | 代码块 | 无 | 在代码中,使用关键字register |
静态,无链接性 | 静态 | 代码块 | 无 | 在代码中,使用关键字static |
静态,外部链接性 | 静态 | 文件 | 外部 | 在函数外面 |
静态,内部链接性 | 静态 | 文件 | 内部 | 在函数外面,使用关键字static |
- 链接性为外部的变量通常简称为外部变量,它们的存储持续性为静态,作用于为整个文件。使用extern来重新声明以前定义过的外部变量。
int warning = 2; //定义声明 int func() { extern int warning; //引用声明,不给变量分配存储空间,这是引用其他地方的变量 } int local() { int warning = 3; //新的变量,隐藏了外部变量 }
- 将static限定符用于作用域为整个文件的变量时,该变量的链接性是内部的;使用链接性为内部的静态变量在同一个文件中的多个函数之间共享数据。
3. 说明符和限定符
- auto 你将变量声明成自动变量
- register 寄存器类型
- static 内部链接性
- extern 外部链接性
- mutable
- const
- volatile
只有未使用extern关键字的声明才能进行初始化。
4. 默认情况下,C++函数的链接性为外部,因此可以在文件间共享;但使用关键字static限定的函数链接性为内部,别限定在定义它的文件里。
5. 名称空间
- 使用已命名的名称空间中声明的变量,而不是使用外部全局变量
- 使用已命名的名称空间中声明的变量,而不是使用静态全局变量
- C++当前提倡将标准函数库放在命名空间std中
- 仅将编译指令using 作为一种将旧代码转换为使用名称空间的权宜之计
- 不要在头文件中用using编译指令
- 导入名称时,首选使用作用域解析操作符或using声明的方法
- 对于using声明,首选将其作用域设置为局部而不是全局