Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez egy potenciálisan költséges másolási művelet. Ha nincs szükség másolatra, fontolja meg a hivatkozás használatát (p.9)
További információért lásd a P.9: Ne pazarolja az időt vagy a helyet részt a C++ irányelvek vezérfonalában.
Ez az ellenőrzés a nem látható és könnyen kihagyható viselkedést mutatja be, amikor hivatkozásokat rendel egy megjelölt auto
változóhoz. A auto
változó típusa értékké, nem hivatkozássá oldódik fel, és implicit másolat készül.
Megjegyzések
Ez a figyelmeztetés nem skalároknál, intelligens mutatóknál vagy nézeteknél fordul elő. Olyan típusok esetében sem alkalmazzák, amelyek mérete nem haladja meg a platformfüggő mutató méretének kétszeresét.
Ez a figyelmeztetés nem jelenik meg, amikor a változó mutánssá válik, mivel a megjelölés
auto&
mellékhatásokat okozna a mutációban.Ez a figyelmeztetés nem jelenik meg, ha a hivatkozás egy ideiglenes objektumból származik, mert az egy csonkoló hivatkozást eredményez. Például:
std::optional<int> TryGetNumber(); ... const auto& val = TryGetNumber().value(); val++; // Temporary from TryGetNumber() is destroyed and val is now dangling
példa
Ez a példa azt mutatja be, hogy egy változódefiníció hivatkozás hozzárendelésekor potenciálisan költséges másolatot készít.
const Object& MyClass::getRef() { ... }
...
auto ref = myclass.getRef(); // C26820 (`ref` takes a copy of the returned object)
A probléma megoldásához deklarálja a változót a következővel const auto&
:
const Object& MyClass::getRef() { ... }
...
const auto& ref = myclass.getRef(); // OK