上一篇我们讲了指针,这一篇先从 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的修改是可行的,因为它是整型变量 - 对
c、d的修改不可行,因为它们是常量引用,不可修改
也就是说……
const 限定符应用在引用上时,只是让 C++ 认为引用指向的对象不可以被修改,而实际指向的对象到底是否为常量(是否可以修改)是没有影响的。
如果已经在对象上施加 const,那么指向它的引用也必须添加,来保持类型一致。可以这么理解:如果引用不加 const,那么 C++ 就认为引用指向的对象可以修改,这显然和对象的不可修改性不符,编译器不允许这样的事情发生。
试试这样想吧:你可以在可以随意使用的瓶子上贴上勿动的标签,但是不能给不能动的瓶子贴上可动的标签!
还记得我们曾经把引用比作瓶子上贴的标签,那么这里的 const 限定符就好像在标签上加上一句:不能动!
特殊用法
在继续前进之前,我们来看点奇怪的常量引用。
int i = 10;
double s = 3.14;
const int


101

被折叠的 条评论
为什么被折叠?



