C++ · Avançado · Português · Técnico
extensão de vida de temporário
Regra pela qual um temporário ligado a uma referência const& ou && local vive até o fim do escopo dessa referência, em vez de morrer no fim da expressão.
Onde usar
Torna seguro escrever const std::string& s = obter();. Em code review, o cuidado é com os casos em que a extensão não ocorre, como referência devolvida por uma função.
Em código
std::string obter() { return "Ana"; }
const std::string& r = obter(); // vive aqui
std::cout << r; // seguro
const std::string& id(const std::string& s) {
return s;
}
const auto& q = id(obter()); // penduradaExemplos
Isso é seguro por causa da extensão de vida de temporário: o objeto vive enquanto a referência existir.
A extensão de vida de temporário não vale quando você devolve a referência de uma função.
Cuidado
A extensão não atravessa chamadas de função: const T& id(const T& x) { return x; } devolve referência a um temporário que já foi destruído.
Sinônimos
lifetime extension