O que faz msvc 6 lance quando uma divisão por zero ocorre?
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?
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.
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.