Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Potenziell teure Kopie des Variablennamens in bereichsbezogener Schleife. Erwägen Sie, ihn zu einem Konstverweis (es.71) zu machen.
Bemerkungen
Weitere Informationen finden Sie unter ES.71: Bevorzugen Sie eine Bereichsanweisungfor, wenn es die Wahl gibt, gegenüber einer for-Anweisung in den C++ Core Guidelines.
Beispiel
Wenn eine Bereichsvariable für Schleifen nicht explizit als Verweis gekennzeichnet ist, wird eine Kopie der einzelnen Elemente, die durchlaufen werden, angezeigt:
#include <vector>
class MyComplexType {
int native_array[1000];
// ...
};
void expensive_function(std::vector<MyComplexType>& complex_vector_ref)
{
for (auto item: complex_vector_ref) // Warning: C26817
{
// At each iteration, item gets a copy of the next element
// ...
}
for (MyComplexType item: complex_vector_ref)
{
// It happens whether you use the auto keyword or the type name
// ...
}
}
Die Warnung ignoriert einige Typen, die billig zu kopieren sind, wie für Skalare (Zeiger, arithmetische Typen usw.).
Wenn die Schleifenvariable nicht an einer beliebigen Stelle in der Schleife stumm geschaltet ist, stellen Sie dieses Problem als Konstverweis fest:
#include <vector>
class MyComplexType {
int native_array[1000];
// ...
};
void less_expensive_function(std::vector<MyComplexType>& complex_vector_ref)
{
for (const auto& item: complex_vector_ref)
{
// item no longer gets a copy of each iterated element
// ...
}
for (const MyComplexType& item: complex_vector_ref)
{
// item no longer gets a copy of each iterated element
// ...
}
}
Das const Schlüsselwort macht die Schleifenvariable unveränderlich. Die Verwendung eines Nichtkonstverweises ermöglicht es, versehentlich den Verweis zu verwenden, um die Elemente des Containers zu ändern. Wenn Sie nur die lokale Schleifenvariable ändern müssen, ist das potenziell teure Kopieren unvermeidbar.