当文档另有说明时,c ++引用会重新分配

时间:2013-05-31 16:41:19

标签: c++ reference

根据this问题,您无法更改参考引用的内容。同样,C ++ Primer 5th Edition声明

  

一旦我们定义了引用,就无法进行引用   指的是另一个对象。当我们使用引用时,我们总是得到对象   参考文献最初被约束。

但是下面的代码compiles并打印出值4,看起来像引用被改变了?请详细说明是否这样。

int a = 2;
int b = 4;
int &ref = a;
ref = b;
cout << ref;

2 个答案:

答案 0 :(得分:15)

您没有重新分配参考。引用充当变量的别名。在这种情况下,refa的别名,所以

ref = b;

相当于

a = b;

您可以通过打印a

的值来轻松检查
std::cout << a << std::endl; // prints 4

答案 1 :(得分:1)

您可以通过将其行为与指针的行为进行比较来了解引用的工作原理。指针可以被认为是变量的地址的名称;但是引用只是变量本身的名称 - 它是别名。一旦设置了别名,就永远不能更改,而如果需要,可以为指针指定一个新地址。所以你有:

int main(void)
{
    int a = 2;
    int b = 4;
    int* ptr_a = &a;
    int& ref_a = a;

    ptr_a = &b;  //Ok, assign ptr_a a new address
    ref_a = &b;  //Error--invalid conversion.  References are not addresses.
    &ref_a = &b; //Error--the result of the `&` operator is not an R-value, i.e. you can't assign to it.

    return 0;
}