我们知道一个const变量的意思是一旦赋值,就不能修改:
int const i=1; i=2;
上面的程序会编译失败,gcc提示error: assignment of read-only variable “i”
这都没有问题,但是下面的程序本人就无法理解了:
#include<iostream> using namespace std; int main() { boolalpha(cout); int const i =1; cout<<is_const<decltype(i)>::value<<endl; int const &ri=i; cout<<is_const<decltype(ri)>::value<<endl; return 0; }
它输出的是
true false
我们知道,引用一旦绑定到了某个名称以后,就不能在绑定到别的名称了,而只能对原绑定的对象进行访问和修改。
那么ri的类型,就是i的类型对吧,那么既然i是int const,为什么ri不是const?
解决方案
10
ri 的类型是 const int &,不是 const int
const int * pi; //也不是const
60
ri的类型是const int&
引用的值是常量,但不是引用本身,你仍然不能修改引用的这个值,如不能写成 ri = 4;
引用的值是常量,但不是引用本身,你仍然不能修改引用的这个值,如不能写成 ri = 4;