我读到了关于C ++引用变量的内容,我发现了这个:
这是什么意思?const引用的声明是多余的,因为永远不能引用引用另一个对象。
例如,在这里,我可以更改引用所指的对象:
void p(int& i) {
int a = 7,c = 0;
i = a;
}
那么“永远不能引用另一个对象”是什么意思?
提前感谢。
答案 0 :(得分:3)
这意味着,给定此代码
int a;
int b;
int& ref = a;
一旦您初始化ref
以引用a
,就无法让它引用b
或任何其他变量。
您对引用所做的任何更改都将反映您用于初始化它的变量。参考(它本身甚至不是一个合适的对象)保持不变。
此外,只要引用的对象保持活动状态,引用才可用。
答案 1 :(得分:1)
在您的示例中,您没有更改i
指向的内容。它正在将i
的值更改为a
的值。如果您在哪里显示i
的地址,则会发现它与a
不同。
答案 2 :(得分:0)
如果您执行int &r = x;
,则表示r
引用x
,每次更改r
时,您确实更改了x
。同样,每次更改x
时,通过r
都可以看到此更改。
现在什么“永远不能引用引用另一个对象”意味着一旦你int &r =x
,你就不能让r
引用y
。您可以执行r = y;
,但所有操作都是将x
设置为y
。这并不意味着之后更改r
会更改y
,也不意味着y
可以看到对r
的更改。
答案 3 :(得分:0)
设想它的最简单方法是用指针来说话:
// 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;
这使得冗余非常明显,我相信。