Обработка ошибок C и исключения (ситуации, когда они могут быть полезны)

#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 (или его производных типов) — это соглашение, которого придерживаются многие программисты, но оно не является обязательным.