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


![[小白求帮助]分配的内存什么时候需要手动释放](https://www.codebye.com/wp-content/themes/douth/timthumb.php?src=https://www.codebye.com/wp-content/themes/douth/assets/img/pic/7.jpg&h=110&w=185&q=90&zc=1&ct=1)