cpp / intermediate
Snippet
Sichere Grenzwertvalidierung in Sammlungen
Während der Subskript-Operator [] schnell ist, führt er keine Grenzwertprüfung durch, was bei ungültigen Indizes zu undefiniertem Verhalten führt. Die von Standard-Containern bereitgestellte at()-Methode validiert den Index und wirft eine std::out_of_range-Ausnahme, wenn der Zugriff ungültig ist, wobei Sicherheit vor reiner Geschwindigkeit geht.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>#include <array>#include <stdexcept>int main() {std::array<int, 3> coords = {10, 20, 30};try {// at() performs bounds checkingint val = coords.at(5);std::cout << "Value: " << val << "\n";} catch (const std::out_of_range& e) {std::cerr << "Error: Access out of bounds! " << e.what() << "\n";}return 0;}
Erklärung
1
int val = coords.at(5);
Versucht auf Index 5 zuzugreifen; löst eine Ausnahme aus, da die Array-Größe nur 3 beträgt.
2
catch (const std::out_of_range& e)
Fängt den spezifischen Ausnahmetyp ab, der von der at()-Methode ausgelöst wird.