C++学习之CV限定符

CV限定符

cv 限定符constvolatile 关键字的统称。

  • 对于除了函数类型或引用类型以外的任何类型 T(包括不完整类型),C++ 类型系统中有另外三个独立的类型:const-限定的 T、volatile-限定的 T 及 const-volatile-限定的 T。

const

表示数据只读,不能被修改。

用途

  1. 声明符号常量;
  2. 修饰常量的作用域和链接性。(C++)

C++ const VS C const

1.C++中const可以修饰常量的作用域;
2.C++中const声明的常量可以用作数组长度。

const VS #define

1.使用const声明符号常量能够指明类型;
2.C++中使用const声明符号常量会限定该常量的作用域;
3.const可以用于数组和结构。

修饰常量的作用域和链接性

  • 在C++中,默认全局变量的链接性为外部的,但const修饰的全局变量的链接性为内部的。
  • 多文件使用:将const修饰的常量放入头文件中,每个包含该头文件的都可以使用该常量,而不会导致二义性。

extern

const int time = 12; 常量time只在声明它的文件或代码段内可见(类似static)。extern关键字可修改默认的内部链接性(在默认作用域的外部、另外一个文件中使用):extern const int time

  • 不能在头文件中定义或初始化常变量,因为当其他文件包含该头文件时,会出现二义性。
  • 需要注意的是其他文件中使用time时必须使用externextern int time;(注意:不能赋值。只能有一个文件对其进行初始化)。

volatile

和 const 是相反的,表示数据是可变的、易变的,目的是不让 CPU 将数据缓存到寄存器,而是从原始的内存中读取。作用:改善编译器的优化能力。

假如你的程序中在多处使用同一个变量,那么编译器编译的时候可能进行优化,即将这个变量的值缓存到寄存器中(为了加快读取速度),而不是让程序查找这个值多次。

  • 多次连续读取某个变量:可能编译器经过优化之后会将其值放入寄存器中,再次读取数据时,从寄存器中读取数据,但是实际数值已经发生了变化。=》程序出错。
  • 共享数据:数据在其他程序中被更改,编译器经过优化后读取寄存器值。 =》出错。

使用volatile关键字声明变量:volatile int time = 24;相当于告诉编译器,不要对time进行这种优化。

C/C++:CV限定的理解
CV-限定符

不能使用CV限定符进行限定的情况

  1. 非成员函数不能使用CV限定
  2. 静态成员函数不能使用CV限定

C++语言学习(五)——C++语言中的CV限定符错误

你可能感兴趣的:(C++\QT,c++,CV限定符)