我看到一些类似这样的代码:
const std::vector<obj>& value = function();
function()
的定义如下:
std::vector<obj> function()
{
std::vector<obj> v {/* ... */};
return v;
}
&
中const std::vector<obj>& value
的含义是什么?是获得本地function()
变量的引用还是副本?
答案 0 :(得分:5)
它声明value
是对常量std::vector<obj>
的引用。
在某些情况下,可以绑定到临时对象的引用(对const的引用和rvalue-references的引用)可以延长其引用的对象的寿命,而这就是其中一种情况。这意味着function
的返回值的生存期延长到value
的生存期。
在C ++ 17之前的版本中,从理论上讲,这可以避免从返回值function
到value
进行额外的复制(尽管我所知道的每个编译器仍然会删除该复制) 。从C ++ 17开始,可以保证不复制任何副本,因此像这样的生命周期延长不再具有太大的用途。