IT-lexikon › Programmering › Copy elision

Copy elision

Programmering In English → Uppdaterad: 2026-07-29

När kompilatorn hoppar över en kopiering eller flytt helt och konstruerar objektet direkt på sin slutdestination. Sedan C++17 är den viktigaste varianten ett krav, inte en optimering.

Att returnera en temporär — return T{...}; — får sedan C++17 inte längre innebära någon kopiering alls: objektet initieras direkt i anroparens utrymme. Regeln är formulerad så att den gäller även för typer som varken går att kopiera eller flytta, vilket gör att en fabrik kan returnera en std::mutex-liknande typ. Varianten med en namngiven lokal variabel, NRVO, är däremot fortfarande frivillig men görs av alla rimliga kompilatorer. Den vanliga fällan är att skriva return std::move(x); i tron att det hjälper — det gör tvärtom: uttrycket är inte längre ett enkelt namn, NRVO stängs av, och resultatet blir en garanterad flytt där ingenting alls hade behövt hända.

← Tillbaka till lexikonet