我对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
。
如果任何变量的引用表示它们之间的强关联,那么这是如何可能的呢?
我对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
。
如果任何变量的引用表示它们之间的强关联,那么这是如何可能的呢?
20 20
。我不明白为什么在第二个cout
中j
不会输出20
。
我运行了这段代码:
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++最基本的东西),要么是你没有正确查看输出结果(这更可能是情况)。
在这里补充一点,const
引用不需要 lvalue 来初始化。例如:
int &r = 10; //ERROR: lvalue required
const int &cr = 10; //OK