代码之家  ›  专栏  ›  技术社区  ›  Intellectual Gymnastics Lover

为什么价值回归是C++中的推荐方式?

c++
  •  0
  • Intellectual Gymnastics Lover  · 技术社区  · 3 年前

    enter image description here

    3 回复  |  直到 3 年前
        1
  •  2
  •   eerorika    3 年前

    在考虑返回引用之前,必须首先确定结果引用的对象。你有什么选择?

    1. 您可以返回对局部自动变量的引用。。。这是非常糟糕的,因为一旦函数返回,局部变量就不存在了。
    2. 可以在静态或线程本地存储中返回对变量的引用。这是坏的,因为全局状态是坏的。
    3. 您可以返回对调用者作为参数提供的对象的引用。在这种情况下,返回引用通常是毫无意义的,因为调用者已经知道对象的位置,因为他们首先负责提供参数。这只是引用的文本所建议的“输出参数”的一个复杂版本。


    我通过引用返回可以在链中调用的成员函数 obj.DoX(...).DoY(...).DoZ(...);

    方法链接是引用 *this obj ,那么为什么要返回对它的引用呢?在这种情况下,答案是:返回引用是为了方便。

    我想说的是,这本书的建议非常适用于函数式编程范式。

    面向对象的编程范式是完全不同的。修改的成员函数 *这个 实际上是一个带有输出参数的函数-这是隐式的 *这个 对象-已修改。所以,引用的经验法则可以看作是反对setter函数的建议。。。或者它可能被视为不适用于面向对象编程。

        2
  •  -1
  •   SortingHat    3 年前

    您引用的这本书的这一部分显然是在讨论通过引用传递的输出参数。这个问题是基于一个完全错误的假设。

    这本书并没有说 const Val& 返回签名不如 Val 返回签名。然而,也许作者并不清楚。