Что выдает msvc 6, когда происходит целочисленное деление на ноль?

StackOverflow https://stackoverflow.com/questions/1909967

  •  19-09-2019
  •  | 
  •  

Вопрос

Я немного поэкспериментировал и обнаружил, что при делении целого числа на ноль выдается исключение.

#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 функция.

http://www.codeproject.com/KB/cpp/seeException.aspx

Результат не определен, вы можете использовать __попробовать / __кроме блок для перехвата ошибки (структурированная обработка исключений).Однако почему бы просто не проверить наличие ошибки перед разделением?

В msvc6 вы можете перехватить его с помощью catch(...) и повторно выбросить с помощью throw;однако, поскольку таким образом вы не можете определить тип исключения, вам лучше сделать что-нибудь другое.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top