从函数中返回“T”时,“T&”是什么意思?

Kat*_*ate 0 c++ reference

我看到一些这样的代码:

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()变量的引用还是副本?

Mil*_*nek 5

它声明value是对 constant 的引用std::vector<obj>

可以绑定到临时对象的引用(引用到常量和右值引用)可以在某些情况下延长它们引用的对象的生命周期,这就是其中一种情况。这意味着 thatfunction的返回值的生命周期延长到value.

在 C++17 之前,这在理论上可以避免从functionto的返回值制作额外的副本value(尽管我知道的每个编译器无论如何都会省略该副本)。由于 C++17 保证不进行复制,因此像这样的生命周期扩展不再有多大用处。