Heim >Backend-Entwicklung >C++ >Warum lässt der „operator[]' von „std::vector' den Zugriff außerhalb der Grenzen ohne Fehler zu?
Fehlerfreier Zugriff auf std::Vector trotz außerhalb der Grenzen
In std::vector löst der Zugriff mit „operator[]“ keinen Fehler aus Berichte, auch wenn ein Index außerhalb der Grenzen liegt. Dies kann zu unerwarteten Ergebnissen führen.
Betrachten Sie das folgende Beispiel:
struct Element { std::vector<double> face; }; int main() { Element elm; // Insert 6 elements into elm.face for (int i = 0; i < 6; i++) elm.face.push_back(i); std::cout << elm.face.size() << std::endl; // Prints 6 std::cout << elm.face[6] << std::endl; // Prints an arbitrary number }
Wie gezeigt beträgt die Vektorgröße 6, aber der Zugriff auf den nicht vorhandenen Index elm.face[6] erzeugt einen nicht -Fehlerantwort. Bei diesem Ergebnis handelt es sich um undefiniertes Verhalten, und der zurückgegebene Wert kann je nach Plattform und Speicherverwaltung variieren.
Im Gegensatz dazu führt die Verwendung von at() für den Zugriff auf Elemente eine Grenzüberprüfung durch und löst eine Ausnahme (std::out_of_range) aus, wenn ein Der Index liegt außerhalb des zulässigen Bereichs. Daher wird empfohlen, at() anstelle von Operator[] zu verwenden, wenn Sie eine Grenzüberprüfung benötigen.
Das obige ist der detaillierte Inhalt vonWarum lässt der „operator[]' von „std::vector' den Zugriff außerhalb der Grenzen ohne Fehler zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!