2017-07-17 67 views
2

根据C++引物,由Stanley B.李普曼,乔西·拉乔,和Barbara E.武:为什么我能够在初始化后重新绑定引用?

一旦被初始化,参考保持结合到其初始目的。没有办法重新绑定引用来引用不同的对象。

那么,我是否似乎能够重新绑定在下面的代码中初始化为另一个对象的引用?

#include <iostream> 

int main() 
{ 
    int num1 = 10; 
    int num2 = 20; 

    int &rnum1 = num1; 

    std::cout << rnum1 << std::endl; // output: 10 

    rnum1 = num2; 

    std::cout << rnum1 << std::endl; // output: 20 

    return 0; 
} 

从我的理解中,num1和num2是两个不同的对象。 是的,但是两个完全不同的对象。

+0

尼斯问题;是的,这真的很让人困惑! – Bathsheba

+4

如果你将引用看作隐藏的指针 –

+0

@ M.M,这只会让你感到困惑,这样做会让你成为一个非常调皮的男孩。 – Bathsheba

回答

5

rnum1 = num2;不是重写的参考。

它简单地设置rnum1(因此num1)到值的num2

3

rnum1num1

另一名当你写rnum1 = ...是,如果你写num1 = ...,因为rnum1num1另一个名字。

因此,参考本身并没有反弹到另一个变量,你在这里是简单的赋值num1

要真正证明这一点,你可以打印num1num2rnum1的内存地址:

#include <iostream> 

int main() 
{ 
    int num1 = 10; 
    int num2 = 20; 

    int &rnum1 = num1; 

    std::cout << rnum1 << std::endl; // output: 10 

    rnum1 = num2; 

    std::cout << rnum1 << std::endl; // output: 20 
    std::cout << &num1 << " " << &rnum1 <<" "<< &num2 << std::endl; 
    return 0; 
} 
相关问题