Warum tritt beim Out-of-Bounds-Zugriff mit dem Operator [] kein C-Vektorfehler auf?
Bei der Arbeit mit C-Vektoren haben Sie kann mit einem merkwürdigen Verhalten konfrontiert werden: Der Versuch, mit dem eckigen Klammeroperator ([ ]) auf ein Element zuzugreifen, das über seine Größe hinausgeht, löst keinen Fehler aus. Dies unterscheidet sich von der at()-Mitgliedsfunktion, die eine Grenzüberprüfung durchführt.
Beispiel:
Bedenken Sie den folgenden Code:
std::vector<double> face; face.push_back(2.3); // Insert 1st element face.push_back(4.5); // Insert 2nd element face.push_back(6.7); // Insert 3rd element face.push_back(8.9); // Insert 4th element face.push_back(11.1); // Insert 5th element face.push_back(13.3); // Insert 6th element std::cout << face.size() << std::endl; // Prints 6 std::cout << face[6] << std::endl; // Prints some number without an error
Erklärung:
Die Klasse std::vector stellt aus Sicherheitsgründen die Memberfunktion at() bereit Zugriff auf Elemente innerhalb der Grenzen des Vektors. Wenn ein Index außerhalb des gültigen Bereichs verwendet wird, löst at() eine std::out_of_range-Ausnahme aus.
Im Gegensatz dazu führt der []-Operator keine Grenzenprüfung durch. Wenn Sie versuchen, mit [] auf ein Element zuzugreifen, das über die Größe des Vektors hinausgeht, führt dies zu undefinierten Ergebnissen. In der Praxis führt dies typischerweise dazu, dass auf Speicher zugegriffen wird, der nicht zum Vektor gehört, was zu unvorhersehbarem Verhalten oder Abstürzen führen kann.
Empfehlung:
Um dies zu vermeiden Bei Problemen wird dringend empfohlen, die Memberfunktion at() für den Elementzugriff innerhalb der Vektorgrenzen zu verwenden. Dadurch wird sichergestellt, dass ein Fehler ausgegeben wird, wenn versucht wird, auf einen ungültigen Index zuzugreifen.
Das obige ist der detaillierte Inhalt vonWarum gibt der Operator „[]' von C Vector beim Out-of-Bounds-Zugriff keinen Fehler aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!