Можно создать дубликат:
How can I catch all types of exceptions in one catch block?Есть ли способ поймать все исключения на C++?
В C++ есть способ, чтобы поймать все исключения? Если да, то какой будет синтаксис для этого?
Merci
Можно создать дубликат:
How can I catch all types of exceptions in one catch block?Есть ли способ поймать все исключения на C++?
В C++ есть способ, чтобы поймать все исключения? Если да, то какой будет синтаксис для этого?
Merci
Да, вы можете перехватывать все исключения, которые не были обработаны (и не вызваны повторно) внутренними try
/catch
блоки catch
ИНГ ...
:
try {
// do some stuff
} catch (...) {
// catch any exceptions that weren't handled and/or rethrown in the try block
}
Вы также можете совместить это с другими catch
es, но убедитесь, что они выше catch (...)
, или они будут замаскированы уловкой (и вы должны получить ошибку компилятора).
Это не обязательно исключает * любое * исключение, потому что те, которые обрабатываются во внутренних блоках try-catch и не останавливают выполнение программы, не перепутаны. –
@RussC это правда, но ловить буквально каждое исключение невозможно с C++. –
Согласен, но ваша формулировка непреднамеренно вводит в заблуждение; просто хотел удостовериться, что OP был осведомлен об области исключения. –
Вы можете перехватывать все исключения, как этот
try{
// ...
} catch (...) {
// ...
}
Однако более полезная вещь, чтобы сделать, это поймать конкретных исключений, а затем, наконец, попадают в (...)
try{
// ...
} catch (const std::exception& ex) {
// ...
} catch (const std::string& ex) {
// ...
} catch (...) {
// ...
}
Нет, вы не можете поймать ВСЕ исключения, потому что вы не можете поймать исключения, которые уже были пойманы другим обработчиком, вложенным в ваш блок try/catch
.
Необходимо уточнить; вы имеете в виду * все * исключения или * все необработанные * исключения? В конце концов, вы можете обернуть свою точку входа в блок try-catch, как упоминал Сет, но если есть внутренний код, который явно обрабатывает исключение и позволяет программе продолжить, он не ударит по блоку catch точки входа. –
Если вы делаете это для отладки исключения, в Visual Studio есть более простой способ; В меню отладки перейдите к опции «Исключения», и вы можете выбирать опции для остановки VS, когда происходит какое-либо исключение, даже если оно обрабатывается, и несколько других вещей. –
И, кстати, это типично «плохая форма». Особенно, если вы делаете что-то вроде 'try {...} catch (...) {; } '(т. е. молчат любые/все возможные исключения). – paulsm4