Функция с исключением в C++
Проверку аргумента прячут внутрь функции. Если значение не годится, функция выбрасывает исключение, а вызывающий код решает, что показать.
Функция возвращает элемент вектора по индексу
только для неотрицательного индекса. Иначе -
std::invalid_argument:
int getAt(const std::vector<int>& vec, int index) {
if (index < 0) {
throw std::invalid_argument("negative index");
}
return vec.at(index);
}
int main() {
return 0;
}
Вызов оборачивают в try-catch, чтобы
отловить и неверный аргумент, и выход за
границы вектора:
int main() {
std::vector<int> vec = {10, 20, 30};
try {
std::cout << getAt(vec, -1) << "\n";
} catch (const std::invalid_argument& e) {
std::cout << "bad arg\n";
} catch (const std::out_of_range& e) {
std::cout << "out of list\n";
}
return 0;
}
Та же схема работает для проверки диапазона
возраста или процента. Несколько catch
подряд позволяют развести сообщения для
разных типов сбоя в одном месте вызова:
void percent(int value) {
if (value < 0 || value > 100) {
throw std::invalid_argument("out of range");
}
std::cout << value << "%\n";
}
int main() {
try {
percent(150);
} catch (const std::invalid_argument& e) {
std::cout << "invalid percent\n";
}
return 0;
}
Создайте функцию ensureNonNegative с
параметром n. Для n < 0
выбросьте std::invalid_argument
с сообщением "negative". Иначе
верните n.
Создайте функцию divide с двумя
целыми параметрами. При b == 0
выбросьте std::runtime_error.
Иначе верните частное. В main вызовите
ее с нулевым делителем в try-catch
и выведите "fail" при ошибке.
Создайте функцию charAtSafe со строкой
и индексом. При отрицательном индексе
выбросьте std::invalid_argument.
Иначе верните символ строки. Обработайте
вызов с большим индексом через
std::out_of_range.