C++ 可以重新分配引用吗?

C++ 可以重新分配引用吗?,c++,C++,我的理解是,一旦分配了参考资料,就不能在以后重新分配。然而,在C++的巡演中,Stroustrup有一个代码: int x = 2; int y = 3; int& r = x; int& r2 = y; r = r2; 这似乎意味着参考r可以在其初始赋值后重新赋值。规则只是引用只能重新分配给其他引用,还是我缺少了其他引用?否此处没有对引用的重新分配。仅将r2引用的y的值分配给r引用的x 要处理这种情况,请将引用视为其引用的变量的别名。当你把引用放在任何地方,你就是把变量本身放

我的理解是,一旦分配了参考资料,就不能在以后重新分配。然而,在C++的巡演中,Stroustrup有一个代码:

int x = 2;
int y = 3;
int& r = x;
int& r2 = y;
r = r2;

这似乎意味着参考
r
可以在其初始赋值后重新赋值。规则只是引用只能重新分配给其他引用,还是我缺少了其他引用?

否此处没有对引用的重新分配。仅将
r2
引用的
y
的值分配给
r
引用的
x

要处理这种情况,请将引用视为其引用的变量的别名。当你把引用放在任何地方,你就是把变量本身放在那里

您可以通过以下代码确保这一点

#include <iostream>

int main()
{
    int x = 2;
    int y = 3;
    int& r = x;
    int& r2 = y;
    r = r2;
    std::cout << std::boolalpha << (&x == &r) && (&y == &r2) && (&y != &r);// gives true
}
#包括
int main()
{
int x=2;
int y=3;
int&r=x;
int&r2=y;
r=r2;

std::cout否此处没有对引用进行重新分配。仅将
r2
引用的
y
的值分配给
r
引用的
x

若要处理这种情况,请将引用视为它引用的变量的别名。当您将引用放置在任何位置时,您将放置变量本身

您可以通过以下代码确保这一点

#include <iostream>

int main()
{
    int x = 2;
    int y = 3;
    int& r = x;
    int& r2 = y;
    r = r2;
    std::cout << std::boolalpha << (&x == &r) && (&y == &r2) && (&y != &r);// gives true
}
#包括
int main()
{
int x=2;
int y=3;
int&r=x;
int&r2=y;
r=r2;

std::cout您没有更改任何引用的内容

如果您查看这4个变量的地址,您将看到:

  • x
    r
    仍然有相同的地址
  • y
    r2
    仍然具有相同的地址
  • x
    y
    仍然有不同的地址

    • 您没有更改任何引用的内容

      如果您查看这4个变量的地址,您将看到:

      • x
        r
        仍然有相同的地址
      • y
        r2
        仍然具有相同的地址
      • x
        y
        仍然有不同的地址

      相关:相关:我想我理解。所以基本上,我们只是替换存储在
      &r
      的值,而不是更改
      r
      本身的地址?@iducam我想我完全理解。所以基本上,我们只是替换存储在
      &r
      的值,而不是更改
      r
      本身的地址?@iducam