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

标签 c++

我正在查看一些代码,所有对返回字符串的函数的调用都分配给了一个引用。函数原型(prototype)类似于:

 std::string GetPath(const std::string& top);

它被用作

std::string& f = GetPath(cw);

 const std::string& f = GetPath(cw);

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

 std::string f = GetPath(cw);

最佳答案

如果函数返回一个引用(它没有),那么您可能需要将返回值分配给一个引用以保持“最新"对该对象进行任何更改。返回的引用必须是一个生命周期超过函数末尾的对象。

或者(如果返回的引用不是-const),因为您想保留对该对象的引用以将其作为后续点进行变异。 (如果您想立即对其进行变异,您可以直接进行,无需存储引用。)

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

任何认为它可能效率较低的想法都可能被证明是没有根据的,如果您愿意,您也可以使用 const 限定对象。 (大多数编译器会消除隐含的临时值,并在正在初始化的对象中构造返回值。)

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

关于c++ - 为什么要为引用分配返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4684646/

相关文章:

c++ - 创建 IloObjective 的正确方法

android - 如何通过我的 PC 终端在我的 android 设备上编译和运行 C 程序。?

VS2015下的C++/CLI调试支持

c++ - 如何在参数包中找到最大值?

c++ - Boost Graph bellman_ford_shortest_paths 与 labeled_graph

c++ - 两个 `std::map` 的交集

c++ - 使用 fstream 读出 txt 文件崩溃 .exe

c++ - 将图像分割成 64x64 的 block

c++ - 指向指针函数的函数指针

c++ - 用于 C++ 的更好的文本 UI 调试器,例如用于 python 的 pudb