Pergunta

Eu tenho feito um pouco de experimentação, e descobriram que uma exceção está sendo lançada, quando uma divisão por zero ocorre.

#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;
}

É claro que não é jogando um std :: exceção. O que mais ele poderia estar jogando?

Foi útil?

Solução

É uma exceção estruturada Windows, que não tem nada a ver com C ++ -. Você teria a mesma exceção se fosse um programa C

Outras dicas

Este artigo afirma que ter uma maneira de converter uma exceção estruturada para um C ++ exceção usando o _ set_se_translator função.

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

O resultado é indefinido, você poderia usar __try / __except bloco para detectar o erro (estruturada excepção). No entanto, por que não simplesmente verificar o erro antes de sua divisão?

Em MSVC6 você pode pegá-lo com catch (...) e relançar-lo com lance; Entretanto, desde que você não pode detectar o tipo de exceção que jeito que você é melhor fora de fazer algo mais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top