2

根据这个问题,您无法更改参考所指的内容。同样,C++ Primer 5th Edition 状态

一旦我们定义了一个引用,就没有办法让那个引用指向一个不同的对象。当我们使用引用时,我们总是得到引用最初绑定到的对象。

然而,下面的代码编译并打印出值 4,在我看来,引用已更改?请详细说明是否如此。

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

2 回答 2

15

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

ref = b;

相当于

a = b;

您可以通过打印 的值轻松检查a

std::cout << a << std::endl; // prints 4
于 2013-05-31T16:42:05.680 回答
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;
}
于 2013-05-31T16:59:32.780 回答