ExpertiDict

C++ · Avançado · Inglês · Técnico

copy elision

ˈkɑːpi ɪˈlɪʒənsubstantivo

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++17

Exemplos

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

Veja também

Todos os termos de C++