存储类说明符
auto(块作用域内,自动分配和销毁)
register
static(静态或线程存储期和内部链接)
extern(静态或线程存储期和内部链接)
thread_local(线程存储期)
mutable(不影响存储期或链接。)
解释
1) | (C++11 前) |
2) | (C++17 前) |
3) static
说明符只能搭配(函数形参列表外的)对象声明、(块作用域外的)函数声明及匿名联合体声明。当用于声明类成员时,它会声明一个静态成员。当用于声明对象时,它指定静态存储期(除非与 thread_local
协同出现)。在命名空间作用域内声明时,它指定内部链接。
4) extern
声明符只能搭配变量声明和函数声明(除了类成员或函数形参)。它指定外部链接,而且技术上不影响存储期,但它不能用来定义自动存储期的对象,故所有 extern
对象都具有静态或线程存储期。另外,使用 extern
且没有初始化器的声明不是定义。
5) |
存储期
程序中的所有对象都具有下列存储期之一:
- 自动(automatic)存储期。这类对象的存储在外围代码块开始时分配,并在结束时解分配。未声明为
static
、extern
或thread_local
的所有局部对象均拥有此存储期。
- 静态(static)存储期。这类对象的存储在程序开始时分配,并在程序结束时解分配。这类对象只存在一个实例。所有在命名空间(包含全局命名空间)作用域声明的对象,加上声明带有
static
或extern
的对象均拥有此存储期。有关拥有此存储期的对象的初始化的细节,见非局部变量与静态局部变量。
(C++11 起) |
引用