为什么我的变量根据其引用而不是相反地更改?

时间:2018-11-07 16:30:19

标签: c++ c++11 reference

我是C ++的新手。使用以下最小程序:

#include <iostream>

int main()
{
    int i, &ri =i;
    i = 5; ri = 10;
    std::cout << i  << " " << ri << std::endl;
}

我观察到输出是

10 10

我期望的位置

5 10

我的推理方法是:

  1. &ri指的是i,因此ri的初始值等于i(无论是什么)。
  2. 现在,当我将值5分配给i时,ri的值将变为5。
  3. 现在,当我将ri的值更改为10时,从rii的引用将被删除,它现在占据一个唯一空间,值为10,并且不不再链接到i
  4. 因此,现在当我std::cout << i and << ri时,结果应显示为5 10

相反,似乎i是指ri(我通过更改分配给ri的值进行检查)。

您能告诉我我在想什么吗?

4 个答案:

答案 0 :(得分:4)

C ++不是Java。您不能重新分配参考。

ri = 10;不会为ri绑定另一个整数。实际上,它正在更改绑定ri的值i

如评论中所建议,您确实应该参加a good C++ book

答案 1 :(得分:2)

rri只是同一事物的两个名称。您首先将5分配给该事物,然后再分配10。在那之后,当然,一件事就是10,并用任何名称来引用它都会给你那个共同的价值。

答案 2 :(得分:1)

参考表示您正在分配变量&i,使其具有与设置为-i相同的变量相同的内存地址。因此,更改有关该地址上的信息的某些操作会更改正在查看该地址以获取其值的任何变量(即引用或指针变量)。

答案 3 :(得分:1)

ri是对i的引用。引用就像指针一样工作。 ri和我是同一个记忆。如果您输入

std::cout << &i << "  " << &ri << std::endl;

都是一样的。将ri设置为10不会赋予它新的内存,而是设置当前的电流。