0 Tage Serie
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 checking
int 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.