Ujarzmianie błędów. Błąd w try catch.

0

Cześć !
Mam pytanie, chodzi o obsługę błędów. Ogólnie to czy ma ona na celu eliminowanie takich okien ? Czy może służyć jeszcze do czegoś innego?
error.png

Jak pozbyć się wyskakiwania ich przy pomocy kodu?
Napisałem coś takiego ale nadal się wyświetla.
Gdzie używacie throw ? Pierwsza myśl to własne biblioteki/implementacje różnych rzeczy np własny wektor i wtedy throw string outOfRange_error.
Czy w prawie każdej funkcji powinien się znajdować try...catch? Jak Wy to widzicie i macie jakieś przydatne linki o wyjątkach?

std::vector<int> numbers { 0,1,2,3,4,5,6,7 };

try {
    numbers[8];
}
catch (const std::exception& e) {
    std::cout << "We caught exception! Here it is:" << e.what();
}
2

Jak chcesz wyjątek to użyj .at() a nie operator[].

4

Żeby było jasne.
Operator [] dla std::vector nie sprawdza zakresu indeksu, wiec jak wyjdziesz poza zakres, to wtedy jest zachowanie niezdefiniowane (może stać się cokolwiek).
W trybie debug Visual Studio dla std::vector dostarcza operator[], który sprawdza zakres indeksu i w razie błędu robi abort. To nie jest wyjątek, tylko informacja o tragicznym błędzie.
W trybie release może się skończyć czymkolwiek (crash, brak błędu, szanse na exception są w zasadzie zerowe).

Natomiast funkcja at zawsze sprawdza zakres indeksu i w razie potrzeby rzuca wyjątek.

1 użytkowników online, w tym zalogowanych: 0, gości: 1