Что означает `T &` при извлечении `T` из функции? - PullRequest
0 голосов
/ 16 февраля 2020

Я вижу такой код:

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

И function() определяют следующим образом:

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

Что означает & в const std::vector<obj>& value? такое получить ссылку или копию локальной function() переменной?

1 Ответ

5 голосов
/ 16 февраля 2020

Объявление value является ссылкой на константу std::vector<obj>.

Ссылки, которые могут привязываться к временным ссылкам (links-to-const и rvalue-reference), могут продлить срок службы объекта, который они Ссылка при некоторых обстоятельствах, хотя, и это одно из тех обстоятельств. Это означает, что возвращаемое значение function имеет время жизни, увеличенное до времени жизни value.

Pre-C ++ 17, и теоретически можно избежать создания дополнительной копии из возвращаемого значения function до value (хотя каждый известный мне компилятор в любом случае удалил бы копию). Начиная с C ++ 17, гарантируется, что копия не будет сделана, поэтому продление срока службы, подобного этому, больше не служит цели.

...