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

时间:2013-07-27 13:04:27

标签: c++ reference

我读到了关于C ++引用变量的内容,我发现了这个:

  

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

这是什么意思?

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

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

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

提前感谢。

4 个答案:

答案 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;

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