存储说明符或cv-限定符

来源:互联网 发布:索尼smartwatch2 软件 编辑:程序博客网 时间:2024/05/18 03:07

存储说明符

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++;       //合法的
原创粉丝点击