Che cosa significa msvc 6 tiro quando si verifica una divisione intera per zero?
Domanda
ho fatto un po 'di sperimentazione, ed ho scoperto che un'eccezione viene gettata, quando si verifica una divisione intera per zero.
#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;
}
Chiaramente non è gettare uno std :: eccezione. Che altro potrebbe essere che gettando?
Soluzione
Si tratta di una delle eccezioni strutturata di Windows, che non ha nulla a che fare con C ++ -. Si otterrebbe la stessa eccezione se si trattasse di un programma C
Altri suggerimenti
In questo articolo sostiene di avere un modo per convertire un'eccezione strutturata per un'eccezione C ++ utilizzando il _ funzione set_se_translator .
Il risultato non è definito, è possibile utilizzare __try / __except blocco per catturare l'errore (la gestione delle eccezioni strutturata). Tuttavia, perché non è sufficiente controllare l'errore prima divisione?
In msvc6 si può prendere con catch (...) e rigenerare con un tiro; tuttavia dal momento che non è possibile rilevare eccezione digitare in questo modo è meglio fare qualcos'altro.