Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Dit is een potentieel dure kopieerbewerking. Overweeg een verwijzing te gebruiken tenzij een kopie vereist is (p.9)
Opmerkingen
Zie P.9 voor meer informatie: Gebruik geen tijd of ruimte in de C++-kernrichtlijnen.
Deze controle behandelt niet-voor de hand liggende en gemakkelijk over het hoofd te zien aspecten bij het toewijzen van een verwijzing naar een variabele gemarkeerd auto. Het type van de auto-variabele wordt omgezet naar een waarde in plaats van naar een verwijzing, en er wordt een impliciete kopie gemaakt.
Deze waarschuwing wordt niet gegenereerd voor scalaire, slimme aanwijzers of weergaven. Het wordt ook niet verhoogd voor typen waarvan de grootte niet meer dan twee keer zo groot is als de platformafhankelijke aanwijzer.
Deze waarschuwing wordt niet gegenereerd wanneer de variabele wordt gemuteerd, omdat het markeren hiervan
auto&bijwerkingen zou introduceren bij de mutatie.Deze waarschuwing wordt niet weergegeven wanneer de verwijzing afkomstig is van een tijdelijk object, omdat dit resulteert in een zwevende verwijzing. Voorbeeld:
std::optional<int> TryGetNumber(); ... const auto& val = TryGetNumber().value(); val++; // Temporary from TryGetNumber() is destroyed and val is now dangling
Voorbeeld
Dit voorbeeld laat zien hoe een variabele definitie een potentieel dure kopie maakt wanneer er een verwijzing aan wordt toegewezen.
const Object& MyClass::getRef() { ... }
...
auto ref = myclass.getRef(); // C26820 (`ref` takes a copy of the returned object)
U kunt dit probleem oplossen door in plaats daarvan de variabele te declareren met behulp van const auto& :
const Object& MyClass::getRef() { ... }
...
const auto& ref = myclass.getRef(); // OK