引用能够引用不同的对象(不在迭代/循环体中)

时间:2018-01-17 18:47:41

标签: c++ c++11 reference

有关于此问题,但似乎有关迭代方案。我在这里遇到了不同的情况。参考定义和"重新分配"发生在相同的范围内。

#include <iostream>
using namespace std;

int main(void) {
    int obja = 10, objb = 20;
    int &r = obja;
    cout << r << endl; // prints the 10
    r = objb; // ???? re-assigning worked? 
    cout << r << endl; // prints the 20
    return 0;
}

问题:

我错误地理解了什么?

2 个答案:

答案 0 :(得分:5)

您正通过obja将新值重新分配给r 新值恰好是objb的值 这并没有将引用robjb重新关联,我认为您可能会对似乎重新关联对新变量的引用的证明感到困惑。这不会发生。 您可以演示如果最后添加会发生什么,例如

cout << obja << " " << objb << endl;

答案 1 :(得分:2)

r = objb;没有将 r 作为对 objb 的引用,只将 objb 的值分配给 r 即可。  尝试打印 r objb 的地址,它会有不同的地址。

cout <<"address of r = "<<&r<<endl;
cout <<"address of objb = "<<&objb<<endl;

如果是参考,它会打印int &r = obja;中的相同地址,因为 r obja 的参考,两者都具有相同的地址地址。