Блок C ++ try-catch не перехватывает аппаратное исключение
Я изучаю аппаратные и программные исключения в Visual Studio 2013. Я знаю, что могу отлавливать аппаратные исключения, установив параметр «Включить исключения C ++» в / EHa (Да, с исключениями SEH). Я пытаюсь поймать следующие исключения:
EXCEPTION_ARRAY_BOUNDS_EXCEEDED - не поймал
EXCEPTION_ACCESS_VIOLATION - пойман
EXCEPTION_INT_OVERFLOW - не поймал
EXCEPTION_INT_DIVIDE_BY_ZERO - пойман
Это пример кода.
try {
a = std::numeric_limits<int>::max();
a += 5;
}
catch (...){
std::cout << "EXCEPTION_INT_OVERFLOW Exception Caught" << std::endl;
exit(1);
}
try {
int h = 0;
b = b / h;
}
catch (...){
std::cout << "EXCEPTION_INT_DIVIDE_BY_ZERO Exception Caught" << std::endl;
exit(1);
}
Ловит только деление на ноль исключений. Это зависит от процессора, или есть что-то еще? Еще один маленький вопрос, есть ли разница между сборками отладки и выпуска?