C++ · Avançado · Inglês · Técnico
copy elision
Otimização em que o compilador omite a cópia ou o movimento de um objeto, construindo-o direto no destino. Desde o C++17 é obrigatória com prvalues.
Onde usar
Por isso return Tipo{...} não chama construtor de cópia nem de movimento. Em code review, é o motivo para não escrever return std::move(local), que bloqueia a elisão do NRVO.
Em código
struct Pesado {
Pesado() { std::cout << "criado"; }
Pesado(const Pesado&) = delete;
};
Pesado fabrica() { return Pesado(); }
Pesado p = fabrica(); // compila no C++17Exemplos
Since C++17 returning a prvalue is guaranteed copy elision.
Desde o C++17 retornar um prvalue tem copy elision garantida.
Copy elision is why the copy constructor never runs in that factory function.
A copy elision é o motivo de o construtor de cópia nunca rodar nessa função fábrica.
Cuidado
A elisão de variáveis nomeadas (NRVO) continua opcional, então o construtor de movimento ainda precisa existir.
Sinônimos
elisão de cópia