Code Bye

为什么reference不是const

我们知道一个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;

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为什么reference不是const