What does msvc 6 throw when an integer divide by zero occurs?
我一直在做一些实验,并且发现当整数除以零时抛出异常。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #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程序,你会得到同样的异常。
本文声称有一种方法可以使用_set_se_translator函数将结构化异常转换为C ++异常。
http://www.codeproject.com/KB/cpp/seexception.aspx
在msvc6中,您可以使用catch(...)捕获它并使用throw重新抛出它; 但是,由于您无法以这种方式检测异常类型,因此最好不要做其他事情。
结果是未定义的,您可以使用__try / __except块来捕获错误(结构化异常处理)。 但是,为什么不在分割之前检查错误呢?