为什么要为引用分配返回值?

Ano*_*nym 23 c++

我正在查看一些代码,并且返回字符串的函数的所有调用都被分配给引用.函数原型如:

 std::string GetPath(const std::string& top);
Run Code Online (Sandbox Code Playgroud)

它被用作

std::string& f = GetPath(cw);
Run Code Online (Sandbox Code Playgroud)

要么

 const std::string& f = GetPath(cw);
Run Code Online (Sandbox Code Playgroud)

为什么会在这里使用引用而不是

 std::string f = GetPath(cw);
Run Code Online (Sandbox Code Playgroud)

CB *_*ley 22

如果函数返回一个引用(它不),那么你可能要分配,以保持"最新"的任何更改该对象的返回值的参考.返回的引用必须是具有超出函数末尾的生命周期的对象.

或者(如果返回的引用不是 - const)因为您希望保留对该对象的引用以将其变为后续点.(如果你想立即改变它,你可以直接改变它,不需要存储引用.)

当函数返回一个值时,您可以将其分配给const引用(对于非const引用将是非法的),并将对象的生命周期延长到引用的生命周期.但是,效果const与将值直接存储在对象中完全相同(旁边).

任何认为它可能效率较低的想法都可能证明是没有根据的,const如果你想要的话,你可以用这个对象进行限定.(大多数编译器消除了隐含的临时值,并在正在初始化的对象中构造返回值.)

由于对象类型是按函数从函数返回的,因此它必须是可复制的,因此没有理由使用引用,因为担心它不是.

  • 哇,你甚至不需要添加毫无根据的侮辱! (9认同)
  • @Alf:"被误导"并不是一种侮辱.它只是意味着"误入歧途".我们都犯错误,这不是什么新鲜事.相反,"愚蠢"和"无能"接受不同的待遇,因为它们被用来降低和挫败一个人,更不用说他们的行为是错误的.而"恐惧"也不是侮辱.它只是意味着"警惕","关注"或"小心"; 我们不小心吗?不,答案之间的差异是随意的,非恶意阅读这个答案不会产生任何侮辱,而你的答案是最重要的. (5认同)
  • 如果代码的作者已经知道,上述内容将是非常侮辱性的.它将代码的作者描述为"误导"和"恐惧".并且相信作者,对OP没有帮助.相反,说代码的作者无能或愚蠢,只是一个简单的评估.它通过知道不相信任何其余代码有充分理由来帮助OP. (2认同)