Что выдает msvc 6, когда происходит целочисленное деление на ноль?
Вопрос
Я немного поэкспериментировал и обнаружил, что при делении целого числа на ноль выдается исключение.
#include <iostream>
#include <stdexcept>
using namespace std;
int main
(
void
)
{
try
{
int x = 3;
int y = 0;
int z = x / y;
cout << "Didn't throw or signal" << endl;
}
catch (std::exception &e)
{
cout << "Caught exception " << e.what() << endl;
}
return 0;
}
Очевидно, что это не исключение std::Exception.Что еще может выдать?
Решение
Это структурированное исключение Windows, которое не имеет ничего общего с C++ — вы бы получили такое же исключение, если бы это была программа на C.
Другие советы
В этой статье утверждается, что есть способ преобразовать структурированное исключение в исключение C++ с помощью _set_se_translator функция.
Результат не определен, вы можете использовать __попробовать / __кроме блок для перехвата ошибки (структурированная обработка исключений).Однако почему бы просто не проверить наличие ошибки перед разделением?
В msvc6 вы можете перехватить его с помощью catch(...) и повторно выбросить с помощью throw;однако, поскольку таким образом вы не можете определить тип исключения, вам лучше сделать что-нибудь другое.