#c
Вопрос:
int main()
{
try
{
int a = 1;
int b;
cin >> b;
if (b <= 0) throw b;
int c = a / b;
cout << c;
}
catch (int c)
{
cout << "You can't divide by zero.";
}
}
Итак, я только сейчас немного изучаю обработку ошибок и исключения, и, очевидно, здесь исключение не нужно, верно? Я также мог бы просто поместить некоторые вещи в оператор if и оператор else, и это тоже сработало бы, не так ли? Поэтому я просто хотел спросить, есть ли у кого-нибудь пример, где было бы лучше иметь дело с ошибками с исключениями?
И еще один крошечный вопрос, я бросил сюда b, но было бы лучше просто составить какое-то целое число и рассмотреть это как код ошибки для данной конкретной ситуации? Или что именно я должен бросать? Я думаю, что если я хочу использовать значение, которое вызвало ошибку, я, вероятно, должен это бросить?
Комментарии:
1. Исключения следует использовать только в том случае, если код, обнаруживающий проблему, не может ее решить. Таков
if ... else ...
правильный подход в этом простом примере.2. Я никогда не видел, чтобы кто-то пытался выбросить что-то, что не унаследовано от исключения. Не проверяя это, я совершенно уверен, что вы можете создавать только исключения, а не случайные типы данных.
3. Я имею в виду, что если я изменю b на 2 или что-то в этом роде, это все равно будет работать так же, но вы в основном говорите, что если я что-то брошу, это должно быть причиной ошибки? В этом есть смысл, но я просто хочу быть на 100% позитивным
4. @JosephLarson Мы можем использовать случайные типы данных в c godbolt.org/z/MThnP6Psb но я согласен, что метание ожиданий более читабельно.
5. @JosephLarson — В качестве исключения может быть выдан любой (копируемый) тип. Вывод из
std::exception
(или его производных типов) — это соглашение, которого придерживаются многие программисты, но оно не является обязательным.