Léxico de TI › Programação › Copy elision

Copy elision

Programação Svenska → Atualizado: 2026-09-28

Quando o compilador pula uma cópia ou movimentação por completo e constrói o objeto direto no seu destino final. Desde o C++17, a variante mais importante é uma exigência da linguagem, não uma otimização.

Retornar um temporário — return T{...}; — desde o C++17 não pode mais envolver cópia nenhuma: o objeto é inicializado direto no espaço de quem chamou a função. A regra é redigida de forma que vale até para tipos que não podem ser copiados nem movidos, o que permite que uma fábrica retorne algo como um std::mutex. Já a variante com variável local nomeada, a NRVO, continua opcional, mas todo compilador razoável a aplica. A armadilha comum é escrever return std::move(x); achando que isso ajuda — na verdade faz o oposto: a expressão deixa de ser um nome simples, a NRVO é desativada, e o resultado é uma movimentação garantida onde nada precisava acontecer.

← Voltar ao léxico