首页 > C++Primer-const限定符
头像
tlzmw001
编辑于 2021-04-24 17:24
+ 关注

C++Primer-const限定符

初始化和const
const只会在执行改变的时候发挥作用,在初始化其他变量时,两个变量是否有const不影响。

多文件中同名的const变量
默认情况下,视为不同的变量,虽然他们名字相同。通过在声明和定义前加extern可以实现多文件使用通过一个const变量。

const的引用
可以定义常量引用,但是不可以用这个引用修改原变量的值;也不能用非常量引用来引用常量,因为如果可以引用,就可以用这个引用修改原变量的值,这是不允许的
const int a = 1;
const int &b = a;
b = 2;//这里是错误的,不能用常量引用修改原变量的值
int &c = a;//错误,不能用非常量引用来引用常量
例外情况:常量引用可以引用非常量,但是非常量引用不可以引用常量

指针和const
可以定义指向常量的指针,指向常量的指针可以不指向常量,但是非指向常量的指针一定不可以指向常量。
与const一样,常量指针不可以改变原变量的值。
const int pi = 1;
const *p = π
tips:
可以这样理解常量const和常量指针,他们只是自以为是,自己约束自己不去改变变量的值,实际并不能保证变量不被改变。

const指针
也成为常量指针,表明指针本身的值不变,而非指向的值不变
int a = 0;
int *const p = &a;//指向非常量的常量指针,指针本身不能修改,但是可以修改a的值
*p = 2;//正确
const int b = 0;//定义常量
const int *const q = &b;//指向常量的常量指针,指针本身不能修改,而且b也不能修改
*q = 3;//错误

顶层/底层const(练习题2.30,2.31掌握不好)
用来定义指针本身和指针指向对象是否为常量。
指针本身是常量就是一个顶层const,指针指向对象是常量就是一个底层const
更一般的,顶层const的含义从指针指向的对象扩展到了所有对象(算术类型,类,指针),底层const则包含了引用等复合类型。在表达式中,都是通过判断等式左边的是否可以更改来判断是哪种cosnt。
在拷贝中,顶层const不会有什么影响,底层const则需要有相同的底层资格,还需要注意类型。

constexpr常量表达式
如果认为一个变量是常量表达式,就可以声明成constexpr。constexpr会把它定义的指针赋予顶层const



全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐