我正在查看一些代码,并且返回字符串的函数的所有调用都被分配给引用.函数原型如:
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如果你想要的话,你可以用这个对象进行限定.(大多数编译器消除了隐含的临时值,并在正在初始化的对象中构造返回值.)
由于对象类型是按函数从函数返回的,因此它必须是可复制的,因此没有理由使用引用,因为担心它不是.