Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här är en potentiellt dyr kopieringsåtgärd. Överväg att använda en referens om inte en kopia krävs (s.9)
Anmärkningar
Mer information finns i P.9: Slösa inte tid eller utrymme i C++ Core Guidelines.
Den här kontrollen hanterar svårupptäckligt och lättförbisett beteende när du tilldelar en referens till en variabel som är markerad auto. Variabeltypen auto matchas till ett värde i stället för en referens och en implicit kopia görs.
Den här varningen är inte aktiverad för skalärer, smarta pekare eller vyer. Den höjs inte heller för typer vars storlek inte är mer än dubbelt så stor som den plattformsberoende pekarstorleken.
Den här varningen höjs inte när variabeln muteras, eftersom markering skulle
auto&medföra biverkningar för mutationen.Den här varningen utlöses inte när referensen kommer från ett tillfälligt objekt, eftersom det resulterar i en dinglande referens. Till exempel:
std::optional<int> TryGetNumber(); ... const auto& val = TryGetNumber().value(); val++; // Temporary from TryGetNumber() is destroyed and val is now dangling
Exempel
Det här exemplet visar en variabeldefinition som kan orsaka en potentiellt dyr kopia när en referens tilldelas.
const Object& MyClass::getRef() { ... }
...
auto ref = myclass.getRef(); // C26820 (`ref` takes a copy of the returned object)
Lös problemet genom att deklarera variabeln med hjälp const auto& av i stället:
const Object& MyClass::getRef() { ... }
...
const auto& ref = myclass.getRef(); // OK