为什么我可以在初始化后重新绑定引用?

时间:2017-07-17 10:10:27

标签: c++ c++11 visual-c++

根据C ++ Primer,Stanley B. Lippman,JoséeLajoie和Barbara E. Moo:

  

初始化后,引用仍然与其初始对象绑定。无法重新绑定引用以引用其他对象。

那么,我是如何能够将我初始化的引用重新绑定到以下代码中的另一个对象?

#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是两个不同的对象。 相同的类型,是的,但两个完全不同的对象。

2 个答案:

答案 0 :(得分:5)

rnum1 = num2;不是重新绑定引用。

只需将rnum1(以及num1)设置为num2

答案 1 :(得分: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;
}