C++中的const限定符

C++中的const限定符


0x01 const修饰变量——常量

有时我们希望定义一个变量之后,这个变量的值就不能进行更改,我们往往也会称其为“常量”,在C语言中,我们往往采用#define进行宏定义,例如:

#define PI 3.14159

在C++中,我们可以使用const对变量进行修饰:

const int Pi = 3.14159;

这样,任何对变量pi进行重新赋值的行为都不被允许,哪怕是重新赋的值和原来的值相同也不允许!

const int Size = 500;
Size = 500; // Error:试图更改一个 read-only 的值 Size

将常量的值赋给变量也是合法的:

const int Size = 512;
int Buffer = Size;

注意:

const修饰的变量必须进行初始化;

const int Size; // Error
const int Buffer = 512; // 正确

0x02 const的引用

我们可以将引用绑定到普通变量上,那么也可以将引用绑定到const对象,即常量上,const的引用也就是我们常说的“常量引用”。

const int Size = 500;
int& r1 = Size; // Error: 视图让一个非常量引用指向一个常量对象
const int& r2 = Size; // 正确

这样我们不能通过引用r2修改Size的值,因为Size是一个const对象,本身的值不允许通过任何途径进行修改!

r2 = 1024; // Error: r2是对常量的引用

对const的引用不是必须引用一个const对象,也可能引用一个非const对象:

const int a = 42;
const int& ra = a; // 正确
int b = 42;
const int& rb = b; // 也是正确的
b = 43;
rb = 43; // Error!

当引用绑定一个非const对象,即变量b时,变量b的值可以进行修改,但是不能通过常量引用rb修改b的值。

0x03 指针和const

同引用一样,指针可以指向常量和非常量,指向常量的指针,其指向对象的值不能修改:

在这里插入图片描述

const double Pi = 3.14159;
double* ptr = Π // Error: ptr是普通指针,不能指向常量
const double* cptr = Π //正确
*cptr = 2.718; // Error

当指向常量的指针指向一个非常量是允许的,只不过不能通过指针更改非常量的值,但是可以通过其他途径进行更改:

double dval = 3.14;
cptr = &dval; // 更改指针cptr的指向
*cptr = 2.718; // Error!
dval = 2.718;
  • 底层const(常量指针):表示指针指向的对象为常量,即指针指向对象的值不能修改,但指针的指向可以修改,像上面程序中的指针cptr就是一个常量指针;
  • 顶层const(指针常量):表示指针本身是一个常量,即指针的指向不可以修改,但是指针所指的对象的值可以进行修改。
    在这里插入图片描述
double d = 2.718;
double* const p = &d;
*p = 3.14; // 正确
double d2 = 3.14;
p = &d2; // Error!
  • 指向常量对象的常量指针:指针本身是个常量,指针所指向的对象也是个常量,也就是说指针的指向不可以修改,指针所指的对象的值也不能修改:
const double Pi = 3.14;
const double E = 2.718;
const double* const cptr = Π
cptr = &E; // Error!
*cptr = 2.718; // Error!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值