"reference can never be made to refer to another object"是什么意思?

What does "reference can never be made to refer to another object" mean?

本文关键字:to object 是什么 意思 another refer never be made reference can      更新时间:2023-10-16

我读过关于C++引用变量的文章,在某个地方我发现了这一点:

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

这是什么意思?

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

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

那么,"引用永远不能用来引用另一个对象"是什么意思呢?

提前谢谢。

这意味着,给定此代码

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

一旦初始化ref以引用a,就无法使其引用b或任何其他变量。

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

此外,引用只有在引用的对象保持活动状态时才可用。

设想它的最简单方法是用指针来表示:

// reference                     // equivalent pointer code
int& r = a;                      int* const r = &a;
r = b;                           *r = b;
function(r);                     function(*r);

也就是说,在声明时,引用声明了现有对象内存位置的别名。然后,引用的任何使用都相当于取消引用指向该内存位置的指针。

现在,常量引用是什么?好吧:

// reference                     // equivalent pointer code
int& const r = a;                int* const const r = &a;
int const& const r = a;          int const* const const r = &a;

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

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

如果执行int &r = x;,这意味着r指的是x,并且每次更改r时,实际上都更改了x。同样,每次更改x时,都可以通过r看到该更改。

现在,"引用永远不能用来引用另一个对象"的意思是,一旦你做了int &r =x,你就不能让r引用y。您可以执行r = y;,但只需将x设置为等于y即可。这并不意味着之后改变r将改变y,也不意味着对y的改变将通过r可见。

相关文章: