全局变量
- 存储持续性:静态
- 链接性:外部:其他文件可以通过
extern来引用,且引用时不能初始化。 如果两个文件都有相同的全局变量,会引起符号重定义
// file1.cppint a;// file2.cppint a;# 符号重定义
全局函数
函数的存储持续性:静态
- 函数的链接性:外部
static
用于全局变量
- 存储持续性:静态;
链接性:内部:其他文件无法引用。
// file1.cppstatic int a = 5;// file2.cppextern int a;# 错误:无法解析的外部符号
可以将
static int a;放在头文件中,不会出错// file1.hstatic int a = 4;# OK
用于局部变量
存储持续性:静态
-
用于类成员变量
static类成员变量只能在类中声明,类外初始化。最好不要在头文件初始化,否则可能重定义。
// file1.hclass Test {public:static int a;};// file1.cpp#include "file1.h"int Test::a = 4;# OK
extern
引用其他文件的全局变量,且不能初始化
// file1.cppint a = 3;// file2.cppextern int a;# OK
extern不能单独使用,必须配合其他文件的全局变量一起使用。// file1.cppextern int a;# 错误:无法解析的外部命令
const
const的全局变量是内部链接的,可以放在头文件中而不出问题。// file1.hconst int a = 4;# OK
类声明定义
- 类的函数在类内定义时,应该写在头文件中,不会出错。
- 类的函数在类外定义时,不应该写在
.h文件中,会出现重定义错误。 - 类的静态函数可以在类内定义,写在头文件中;也可以在类外定义,写在头文件中。
- 类的静态成员变量,必须在类外定义,不应该写在
.h文件中,否则重定义。 - 全局函数可以包装为类的静态函数,从而通过头文件发布。
