from https://en.cppreference.com/w...
存储类型说明符控制着名字的两个独立属性:存储周期(storage duration)和链接性(linkage)。
存储类型说明符有以下几种:
- auto : automatic存储周期。(until c++11)
- register : automatic存储周期,并指示编译器将对象存放在寄存器中。(until c++17)
- static : static存储周期或者thread存储周期,并具有(internal linkage)内部链接性。
- extern : static存储周期或者thread存储周期,并具有(extern linkage)外部链接性。
- thread_local : thread存储周期。(since c++11)
- mutable : 并不会影响存储周期和链接性,详情请看const/volatile。
仅仅只有一个存储类型说明符能够出现在一个声明中。(除了thread_local能够和static或者extern联合使用)
thread_local关键字仅被允许出现在命名空间作用域、块作用域中声明的对象前以及静态数据成员前,该关键字指示了对象具有thread存储周期,可以和static或者extern联合使用以指明内部或者外部的链接性(除了静态数据成员,它总是外部链接的)注:这里的static或extern并不会影响存储周期
关于storage duration:
程序中所有对象的存储周期都属于以下中的一个:
automatic存储周期:这是默认的存储周期,所有不属于其他存储周期的对象都属于此类存储周期。
static存储周期:所用声明于命名空间作用域中的对象(包括全局作用域)拥有此种存储周期。
thread存储周期:仅被声明为thread_local的对象具有此种存储周期。
dynamic存储周期:通过动态内存分配函数进行分配和回收的对象,拥有此种存储周期的对象的初始化使用new表达式。
静态局部变量:
声明在块作用域中并且被标识符static或者thread_local修饰,拥有static或者thread存储周期,但该对象初始化于第一次执行其声明表达式时,在后序的所有调用中,该声明会被跳过。
此分翻译并不完整,只是对其中简要部分进行了翻译。具体内容详见:
https://en.cppreference.com/w...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。