我对C ++中const引用的概念有疑问。
int i =10;
const int &j = i;
cout<<"i="<<i<<" j:"<<j; // prints i:10 j:10
i = 20;
cout<<"i="<<i<<" j:"<<j; // prints i:20 j:10
为什么第二个j
语句不会打印新值,即20
。
如果对任何变量的引用表示两者之间存在强烈的联系,那该怎么可能呢。
答案 0 :(得分:6)
这是一个编译器错误。代码应打印20 20
。
答案 1 :(得分:4)
我认为j
无法在第二个20
中打印cout
的原因。
我运行了这段代码:
int main() {
int i =10;
const int &j = i;
cout<<"i="<<i<<" j:"<<j << endl; // prints i:10 j:10
i = 20;
cout<<"i="<<i<<" j:"<<j << endl; // prints i:20 j:10
return 0;
}
它给了我这个输出:
i=10 j:10
i=20 j:20
自己查看在线演示:http://ideone.com/ELbNa
这意味着,你正在使用的编译器有bug(这种情况不太可能,因为它是C ++中最基本的东西),或者你没有正确看到输出(很可能就是这种情况) )。
答案 2 :(得分:3)
const引用表示它无法更改refferant的值。但是,推荐人可以更改其值,进而影响参考。我不知道为什么你得到你显示的输出。
答案 3 :(得分:0)
在这里添加一个点,const
引用并不需要左值来初始化它。例如
int &r = 10; //ERROR: lvalue required
const int &cr = 10; //OK