Pregunta

He estado haciendo un poco de experimentación, y han descubierto que una excepción se está lanzando, cuando se produce una división entera por cero.

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

Está claro que no está lanzando un std :: excepción. ¿Qué otra cosa podría ser que tirar?

¿Fue útil?

Solución

Es una excepción estructurada de Windows, que no tiene nada que ver con C ++ -. Se llega a la misma excepción si se tratara de un programa en C

Otros consejos

Este artículo afirma que tiene una forma de convertir una excepción estructurado para una excepción de C ++ usando el _ función set_se_translator .

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

El resultado es indefinido, se puede usar __try / __except bloque para detectar el error (control estructurado de excepciones). Sin embargo, ¿por qué no simplemente comprobar si el error antes de su división?

En MSVC6 se puede coger con la captura (...) y volver a lanzar con un tiro; Sin embargo, ya no se puede detectar la excepción escribir de esa manera es mejor hacer algo más.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top