【问题标题】:What does "reference can never be made to refer to another object" mean? [duplicate]“永远不能引用另一个对象”是什么意思? [复制]
【发布时间】:2013-07-27 13:04:27
【问题描述】:

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

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

这是什么意思?

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

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

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

提前致谢。

【问题讨论】:

  • 查看引用的最佳方式是为引用的内容使用不同的名称:int i; int& r = i; 这里,ri 的不同名称。了解r 确实 指向i 至关重要。 r i。它不能是i 以外的任何东西。这就是为什么文本说“永远不能引用另一个对象。”

标签: c++ reference


【解决方案1】:

这意味着,给定这段代码

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        如果您使用int &r = x;,这意味着r 指的是x,并且每次您更改r 时,您都会真正更改x。同样,每次您更改 x 时,该更改都可以通过 r 看到。

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

        【讨论】:

          猜你喜欢
          • 2015-09-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-21
          • 2021-10-07
          • 2019-09-12
          相关资源
          最近更新 更多