В настоящее время я испытываю трудности с поиском asp цели / использования исключений в C ++.
В других языках, с которыми я больше знаком, например, C#, исключения генерируются автоматически, если что-то идет не так. Например, деление на ноль или нарушение доступа, потому что вы получили не назначенную ссылку. То, что я делал на этих языках, заключалось в том, чтобы обернуть разделы моего кода в блоки try / catch, где могло произойти что-то ужасное. Например, обработка данных, поступающих из файла, который может быть поврежден.
Теперь, погружаясь немного глубже в C ++, я заметил, что оба деления на ноль и segfaults не генерируют исключения:
#include<iostream>
void produceCrash()
{
int i = 1/0; // program just crashes no exception
int* p;
*p = 10; // same thing here
}
int main()
{
try
{
produceCrash();
}
catch(const std::exception& e)
{
std::cerr << e.what() << std::endl;
}
catch(...)
{
std::cerr << "Exception thrown!" << std::endl;
}
return 0;
}
Из того, что я понимаю, можно ловить только исключения, которые были явно выброшены броском. Это означало бы, что любую неожиданную ошибку просто невозможно отследить. Означает ли это, что исключения в C ++ - это просто (более чистая и более читаемая) альтернатива таким вещам, как возврат кода ошибки и просто способ управления потоком вашей программы?