Блок try и catch в C++
Опасный участок можно не ронять всю программу.
Его ставят в try: это попытка выполнить
команды. Если случится сбой, выполнится
catch - реакция на ошибку:
int main() {
try {
// код, который может сорваться
} catch (const std::exception& e) {
// реакция на сбой
}
return 0;
}
Обратимся к элементу вектора по неверному индексу
без обработки - программа упадет. С catch
можно вывести текст ошибки через e.what():
int main() {
std::vector<int> vec = {1, 2, 3};
try {
std::cout << vec.at(10) << "\n";
} catch (const std::exception& e) {
std::cout << e.what() << "\n";
}
return 0;
}
Если в try исключения не было, блок
catch пропускается. После пары try-catch
выполнение идет дальше, как после обычной команды:
int main() {
std::vector<int> vec = {5, 6, 7};
try {
std::cout << vec.at(0) << "\n";
} catch (const std::exception& e) {
std::cout << e.what() << "\n";
}
std::cout << "done\n"; // выведет done
return 0;
}
Переменная в catch хранит объект исключения.
Базовый тип std::exception дает метод
what() с текстом, который сформировала
библиотека.
Дан вектор целых чисел из трех элементов.
Выведите элемент с индексом 10.
Если обращение сорвалось, выведите текст
ошибки в консоль.
Дан вектор целых чисел. Запросите у пользователя
индекс. Выведите элемент по этому индексу
в try. При ошибке выведите e.what().
Дана строка str. Преобразуйте ее в целое
число через std::stoi в блоке try.
При ошибке выведите e.what().