我正在查看一些代码,所有对返回字符串的函数的调用都分配给了一个引用。函数原型(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/