对const引用一个非const的对象

对const引用一个非const的对象

问题描述:

对于这个代码:
int i=42;
int &r1=i;
const int &r2=i;
r1=0;
此时通过r1改变i的值,r2的值也变了,但是引用类型不一致的时候会绑定一个临时量,比如当i为double类型时通过r1改变i值,r2的值不会变仍为原值,求解释???

这个涉及到编译器的编译,不同类型不能使用引用,const是编译器检查你是否存在赋值,但是运行中你去改变则不保证不会被修改。

先说明一下,我是从js 的角度分析的,
const 是定义一个不能被改变的常量。在js 里使用 const 定义的数值是无法被修改的,但是const 定义的引用类型,对象,数组之类的,只能保证不能改变引用的对象,但是可以修改对象本身。
这里在C中可能反过来了 ,指向的 整数 是一个地址,const 保证的是指向的地址不会发生改变,但是可以改变这个地址里面的内容,而C中的引用类型,string 等,是不可以被修改的。

const变量储存在单独的内存区域,与static类似,相同类型下你用引用接收的普通变量,相当于const的地址使用了普通变量的地址,在普通变量地址不变的情况下const变量值就是普通变量值。