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

时间:2020-02-16 13:11:24

标签: c++ reference

我看到一些类似这样的代码:

const std::vector<obj>& value = function();

function()的定义如下:

std::vector<obj> function()
{
   std::vector<obj> v {/* ... */};
   return v; 
}

&const std::vector<obj>& value的含义是什么?是获得本地function()变量的引用还是副本?

1 个答案:

答案 0 :(得分:5)

它声明value是对常量std::vector<obj>的引用。

在某些情况下,可以绑定到临时对象的引用(对const的引用和rvalue-references的引用)可以延长其引用的对象的寿命,而这就是其中一种情况。这意味着function的返回值的生存期延长到value的生存期。

在C ++ 17之前的版本中,从理论上讲,这可以避免从返回值functionvalue进行额外的复制(尽管我所知道的每个编译器仍然会删除该复制) 。从C ++ 17开始,可以保证不复制任何副本,因此像这样的生命周期延长不再具有太大的用途。

相关问题