const 限定符

1. const与变量

  1. const修饰的变量,在被初始化后就不能对其内容进行修改。

  2. const修饰的变量必须初始化。

//初始化的情况如下
const int data = 1024;//情况1 直接给一个初始值。
const int data = fun();//情况2 把函数的返回值作为初始值
int i = 42;
const int data = i;//情况3 由一个已经被初始化的变量的值作为初始值
//总结来说,就是必须在定义时有一个确定的值
static const int data;//情况4 加static修饰,这里实际上隐含了赋初值0的条件

data = 512;//错误代码,此时data所在的内存已经不能被修改了

需要注意的是,无法被修改的只是const限定的变量,如果这个变量被赋值给了一个新的变量,那么新的变量是可以被修改的。

2. const与引用

引用实质上就是给变量起了一个别名,实际上操作的是同一块内存空间

const int data = 50;
const int &rData1 = data;//正确,该空间的值都不能被修改
rData1 = 45;//错误,不能有常量的引用,45本身没有指带内存空间
int &rData2 = rData1;//错误, rData2的空间可以修改。rData1的空间不能修改

int rData3 = 40;
const int &rData4 = rData3;//正确,rData3的空间可以修改。rData4的空间不能修改

总结:

  1. 双方都必须有一块确定的内存空间

  2. 权限可以缩小,但是不能扩大

3. const与指针

const修饰指针,需要看其在 * 前还是 * 后。在前面表示指针指向空间的值不能被修改,在后面表示指针指向空间的地址不能被修改。

左定值,右定址

const int a = 3;
int* pa = &a;//错误,被const修饰的变量,只能被const修饰的指针所指向
const int* pa = &a;//正确,同时const在 * 前,指向空间的值不能被修改

int a, b;
int * const pa = &a;
pa = &b;//错误,const在 * 后,指向空间的地址不能被修改

4. constexpr(c++11)

常量表达式是指编译过程中就会被计算的表达式。被constexpr修饰的变量一定是一个常量,并且必须用常量初始化,否则这条语句就是错误的

constexpr int i = 20;//正确,20是常量,i也是常量

int i = 20;
constexpr int j = i;//错误,i是不是常量,无法初始化被constexpr修饰的变量

如果是用一个函数的返回值初始化constexpr修饰的变量,那么这个函数的返回值必须唯一

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页