存储类
计算机名词
存储类是C语言C++语言的标准中,变量与函数的可访问性(即作用域范围scope)与生存期(life time)。存储类可分为auto、register、static、extern、mutable、thread_local等。
存储类的分类
存储类是C语言与C++语言的标准中,变量与函数的可访问性(即作用域范围scope)与生存期(life time)。
存储类可分为auto、register、static、extern、mutable、thread_local等。
auto类
auto类是指定于在{与}所限定的作用域内部的局部变量的缺省存储类。例如:
{
int Count;
auto int Month;
}
上述两个变量具有相同的存储类。实际上auto关键词一般都省略。
register
register关键字提示编译器把局部变量或函数的形参尽可能放入CPU的寄存器中,以便快速访问。因此变量的字节长度不应该超过寄存器的长度。不要用取地址符(&)去获得此变量的内存地址。例如:
{
register int Miles;
}
static
static是全局变量的默认存储类。例如:
static int Count;
int Road;
main()
{
}
Count与Road两个变量都是默认的static存储类。
局部变量也可以具有static存储类。例如:
void Func(void)
{
static sum=1;
}
实际上,static本意是指变量的值在程序生存期一直可以保持,而且变量需要初始化。全局变量加上static关键字,实际上改变的是全局变量的可见性,即仅在本编译单元(translate unit)内部可见、可访问,其它编译单元不可访问此全局变量。例如,上例中的全局变量count。
extern
extern存储类是指全局变量可以被各个对象模块访问。使用extern关键字时,表示变量已经在别处定义,所以不能在此处初始化。
mutable
mutable存储类只能用于类的数据成员,不能用于普通变量。具有mutable性质的类的数据成员打破了类对象的const限定,允许修改类的mutable的数据成员,即便类的其它成员仍然是const只读属性。
thread_local
适用于命名空间内的变量、全局作用域的变量、函数内部定义的静态变量,如果使用了thread_local关键字,则在运行时不同的线程具有该变量的不同的存储位置,即各有各的副本。因此,具有thread_local存储类的变量,必然具有static存储类性质,不管是否使用了static关键字。
新定义概念
C++2011标准中,把storage class细分为存储持续(storage duration)与链接性(linkage)两大属性。存储持续期分为静态存储持续(static storage duration)、线程存储持续(thread storage duration)、自动存储持续(automatic storage duration)、动态存储持续(dynamic storage duration)等共计4种互斥的情形。链接性分为外部链接性(external linkage)与内部链接性(internal linkage)。这些概念实际上是上述传统的存储类概念的规范化。
参考资料
最新修订时间:2024-08-18 18:18
目录
概述
存储类的分类
参考资料