存储说明符
c++有关提供存储信息的关键字有如下几个:
- auto(在c++11中不再是说明符,用于自动类型判断)
- register(寄存器变量,c++11显示地指出自动变量)
- static(静态持续变量)
- extern(引用外部变量声明)
- thread_local(c++11新增,指出变量的持续性和线程的持续性相同。关系类似于静态持续变量之于整个程序。)
- mutable(即使结构或类中的变量为const,其某个成员也可以被修改)
限定符
cv-限定符:
- const
- volatile
1.再谈const
在c++(而不是c语言中)中,const 限定符对默认的存储类型稍有影响。在默认情况下,全局变量具有外部链接性,而使用了const 进行修饰的全局变量的链接性改为内部链接性,即只能在本文件中使用。在这种情况下,如果希望此常量的链接性是外部的,则必须在使用该常量的其他文件中使用 extern 来进行引用声明。
2.关键字:volatile
关键字volatile表明,即使程序代码没有对内存单元进行修改,其值也会发生变化。该关键字的作用是为了改善编译器的优化。例如,编译器发现,程序在几条语句中使用了同一个变量的值两次,但是中间代码没有对该变量的值进行过修改,如果此时变量没有声明成 volatile 类型,那么编译器在第二次使用该变量的值时,将进行优化,直接从存储该值的缓冲寄存器取值,但是若声明为 volatile 类型,那么第二次使用该值时,程序将和第一次使用该变量一样,也从该变量地址处取值,此时相当于告诉编译器不要进行优化。
3.关键字:mutable
关键字mutable表明,即使结构或类中的变量为const,其某个成员也可以被修改。示例如下:
struct data
{
char name[20];
mutable int grade;
}
....
const data one={"david",90};
one.name="mary"; //不合法的
one.grade++; //合法的