我看到一些这样的代码:
const std::vector<obj>& value = function();
Run Code Online (Sandbox Code Playgroud)
并function()定义如下:
std::vector<obj> function()
{
std::vector<obj> v {/* ... */};
return v;
}
Run Code Online (Sandbox Code Playgroud)
&in是什么意思const std::vector<obj>& value?是获取局部function()变量的引用还是副本?
它声明value是对 constant 的引用std::vector<obj>。
可以绑定到临时对象的引用(引用到常量和右值引用)可以在某些情况下延长它们引用的对象的生命周期,这就是其中一种情况。这意味着 thatfunction的返回值的生命周期延长到value.
在 C++17 之前,这在理论上可以避免从functionto的返回值制作额外的副本value(尽管我知道的每个编译器无论如何都会省略该副本)。由于 C++17 保证不进行复制,因此像这样的生命周期扩展不再有多大用处。