#include
int main(){
int i = 42;
const int &r1 = i;
const int &r2 = i * 2;
i = 43;
std::cout << r1 << r2;
}
结果是 4384,
表明i=43影响了r1,没有影响r2
原因是r1是一个常量引用指向i,r1 是对 i 的常量引用,i改变了r1也就改变了。
r2指向的是一个表达式,其结果是一个临时变量临时变量的生命周期为表达式所在的语句块,在语句块结束时会被销毁。
因此,r2 是对一个临时变量的引用。临时变量是不可修改的,因此 r2 是一个非const引用。
所以i的改变不会影响r2.