我阅读了有关 C++ 参考变量的信息,并在某处发现了这一点:
const 引用的声明是多余的,因为永远不能引用另一个对象。
这是什么意思?
例如,在这里,我可以更改引用所指的对象:
void p(int& i) {
int a = 7,c = 0;
i = a;
}
那么“永远不能引用另一个对象”是什么意思呢?
提前致谢。
这意味着,鉴于此代码
int a;
int b;
int& ref = a;
也就是说,一旦你初始化ref
了引用a
,你就无法让它引用b
或任何其他变量。
您对引用所做的任何更改都将反映在您用于初始化它的变量上。引用(它本身甚至不是一个适当的对象)保持不变。
此外,只有当它引用的对象仍然存在时,引用才可用。
在您的示例中,您没有更改i
指向的内容。它将 VALUE 更改i
为 的值a
。如果您在哪里显示 的地址i
,您会发现它与 不同a
。
设想它的最简单方法是用指针来说话:
// reference // equivalent pointer code
int& r = a; int* const r = &a;
r = b; *r = b;
function(r); function(*r);
也就是说,在声明的那一刻,引用声明了现有对象内存位置的别名。然后,对引用的任何使用都相当于取消引用指向该内存位置的指针。
现在,什么是const引用?那么它会是:
// reference // equivalent pointer code
int& const r = a; int* const const r = &a;
int const& const r = a; int const* const const r = &a;
我相信,这使得冗余非常明显。
如果你这样做意味着int &r = x;
你每次改变,你就真的改变了。同样,每次更改时,更改都可以通过.r
x
r
x
x
r
现在“永远不能引用另一个对象”的意思是,一旦你这样做了int &r =x
,你就不能r
引用y
。你可以做r = y;
,但所做的只是设置x
等于y
。这并不意味着r
之后的更改会更改y
,也不意味着更改 toy
将通过 可见r
。