以下代码可以编译但在运行时崩溃:
int main() {
try {
throw;
}
catch(...){
cout<<"In catch";
}
return 0;
}
结果:“hello.exe 中 0x7c812a5b 处未处理的异常:Microsoft C++ 异常:[重新抛出] @ 0x00000000”
为什么编译器允许代码编译?编译器检查这段代码是否是 catch block 的一部分看起来并不难。
最佳答案
来自 C++ 标准 (15.1.8)
If no exception is presently being handled, executing a throw-expression with no operand calls std::terminate()
由于标准允许并给出清晰的语义,编译器只能符合它。
关于c++ - Bad Re-throw 编译但在运行时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1310790/