根据this问题,您无法更改参考引用的内容。同样,C ++ Primer 5th Edition声明
一旦我们定义了引用,就无法进行引用 指的是另一个对象。当我们使用引用时,我们总是得到对象 参考文献最初被约束。
但是下面的代码compiles并打印出值4,看起来像引用被改变了?请详细说明是否这样。
int a = 2;
int b = 4;
int &ref = a;
ref = b;
cout << ref;
答案 0 :(得分:15)
您没有重新分配参考。引用充当变量的别名。在这种情况下,ref
是a
的别名,所以
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;
}