2

我阅读了有关 C++ 参考变量的信息,并在某处发现了这一点:

const 引用的声明是多余的,因为永远不能引用另一个对象。

这是什么意思?

例如,在这里,我可以更改引用所指的对象:

void p(int& i) {
    int a = 7,c = 0;
    i = a;
}

那么“永远不能引用另一个对象”是什么意思呢?

提前致谢。

4

4 回答 4

3

这意味着,鉴于此代码

int a;
int b;
int& ref = a;

也就是说,一旦你初始化ref了引用a,你就无法让它引用b或任何其他变量。

您对引用所做的任何更改都将反映在您用于初始化它的变量上。引用(它本身甚至不是一个适当的对象)保持不变。

此外,只有当它引用的对象仍然存在时,引用才可用。

于 2013-07-27T13:06:49.180 回答
1

在您的示例中,您没有更改i指向的内容。它将 VALUE 更改i为 的值a。如果您在哪里显示 的地址i,您会发现它与 不同a

于 2013-07-27T13:07:06.800 回答
1

设想它的最简单方法是用指针来说话:

// 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;

我相信,这使得冗余非常明显。

于 2013-07-27T13:44:24.477 回答
0

如果你这样做意味着int &r = x;你每次改变,你就真的改变了。同样,每次更改时,更改都可以通过.rxrxxr

现在“永远不能引用另一个对象”的意思是,一旦你这样做了int &r =x,你就不能r引用y。你可以做r = y;,但所做的只是设置x等于y。这并不意味着r之后的更改会更改y,也不意味着更改 toy将通过 可见r

于 2013-07-27T13:08:01.573 回答