奶奶都能看懂的 C++ —— const 限定符与指针

上一篇我们讲了指针,这一篇先从 const 讲起。

常量

嗯。const,顾名思义,就是不变。给任何数据类型加上 const,就指明了这个变量不会再变化。任何试图修改变量的操作都会报错,无法通过编译。比如:

const int a = 10;
a = 11; //Error!

当然,常量也必须在定义时初始化。

常量自己不能变,但这不代表不能使用。它可以被用于初始化其它对象:

int b = a * 2;
// b = 20

很简单的东西,不是吗?接下来让我们结合一下上一篇的引用和指针。

常量引用

我们可以使用 const 限定修饰一个引用。由于引用本身就不可以更改它绑定的对象,所以这里 const 只是阻止了对绑定对象的修改而已:

const int a = 10;
int b = 10;
const int &c = a;
const int &d = b;
int &e = a; //Error
a = 11;// Error
b = 11;// OK!
c = 11;// Error
d = 11;// Error

看看上面的代码,对 a,c,d 的修改都会产生编译错误。我们一个个分析:

  • a 是常量,但是 e 是个普通引用,非常量不能绑定到常量
  • a 的修改是不可行的,因为它是个常量
  • b 的修改是可行的,因为它是整型变量
  • cd 的修改不可行,因为它们是常量引用,不可修改

也就是说……

const 限定符应用在引用上时,只是让 C++ 认为引用指向的对象不可以被修改,而实际指向的对象到底是否为常量(是否可以修改)是没有影响的。

如果已经在对象上施加 const,那么指向它的引用也必须添加,来保持类型一致。可以这么理解:如果引用不加 const,那么 C++ 就认为引用指向的对象可以修改,这显然和对象的不可修改性不符,编译器不允许这样的事情发生。

试试这样想吧:你可以在可以随意使用的瓶子上贴上勿动的标签,但是不能给不能动的瓶子贴上可动的标签

还记得我们曾经把引用比作瓶子上贴的标签,那么这里的 const 限定符就好像在标签上加上一句:不能动!

特殊用法

在继续前进之前,我们来看点奇怪的常量引用。

int i = 10;
double s = 3.14;
const int 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值