C++Primer2.4 const限定符

const变量初始化

为了防止程序不小心改变变量值,可以用const对变量类型加以限定

例如:

const int a = 152;	// const对变量类型加以限定标准格式
a = 128;	// 错误,不能改变const修饰过的变量的值
  • 因为const变量一旦创建之后,其值就不能改变,所以需要在创建的时候对其初始化(赋值)
const int b = 152;	// 正确
const int c;	// 错误,c是一个未经过初始化的常量

const类型的变量与正常的变量相似,都能参与加减乘除运算,只是const类型变量的值,不允许被改变

  • 如果用一个变量去初始化另外一个变量(也就是拷贝),则它们是不是const类型的变量都无所谓
int i = 42;
const int ci = i;	// 正确,i赋值给ci
int j = ci;		// 正确,ci是一个常数,赋值给i

尽管ci是一个const修饰的整型变量(下面用整型常量表示),但ci本质上就是一个常数,因此可以赋值给j。

  • 简而言之,ci的常量特征只有在改变ci的值时,才会发挥作用。否则,把它当作是一个整型变量就好了

const的引用

当我们引用const变量时,可以称为常量引用

const int ci = 1024;
const int &r1 = ci;		// 等号两边数据类型要一样
r1 =42;		            // 错误,不允许修改ci的值
int &r2 = ci; 		    // 数据类型不同,ci是整型常量,而r2是一个整型变量,这和赋值时不一样

引用的基本使用

作用: 给变量起别名

语法: 数据类型 &别名 = 原名

对const的引用,通常可以称为常量引用

int i = 42;
const int &r1 = 42;		// 正确
const int &r2 = i;		// 允许将const int &绑定在一个普通int对象上
int &r3 = r2*2;		    // 错误,r4是一个普通的非常量引用

注意观察r2、r3,我们可以将int引用为const int,反之则不行。并且,常量引用(const int &)仅对引用允许的操作做了限定,对引用对象本身是不是常量未作限定

int i = 42;
int &r1 = i;
const int &r2 = i;	// 引用i为r2,但不允许通过r2修改i
r1 = 0;				// 正确,r1是变量不是常量
r2 = 0;				// 错误,r2是常量

在上面代码中,允许r2引用(非常量)整数i,但不允许通过r2修改i的值。但是,我们可以通过修改r1的值,来修改i的值

指针和const

指针常量

与引用一样,可以令指针指向常量,则称为指向常量的指针(或者指针常量),它要求不能改变所指的对象的值

const double pi = 3.14;
double *ptr = π			//错误,ptr是变量,pi是常量
const double *cptr = π	//正确,这就是一个指向常量的指针
*cptr = 42;					//错误,不能改变所指的对象的值

常量指针

又称为常量指针,要求不能改变存放在指针中的地址。

把*放在const关键字前,说明指针是一个常量,表示不变的是指针本身,而不是指向的那个值

int errNumb = 0;				
int *const curErr = &errNumb;	// curErr一直指向errNumb所在的地址
const double pi = 3.1415;
const double *const pip = π

对于int *const curErr = &errNumb;,可以从右往左阅读,离curErr最近的符号是const,说明curErr本身是一个常量,const下一个是*,说明curErr是一个常量指针,最后int确定了curErr指向的是一个int类型的变量。

同理,pip也是一个常量指针,指向的是一个const double类型的变量

image-20240415111107819

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落叶随峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值