c++ - Bad Re-throw 编译但在运行时崩溃

标签 c++ exception

以下代码可以编译但在运行时崩溃:

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/

相关文章:

c++ - 我可以在不安装 Visual Studio 的情况下使用英特尔 C++ 编译器 [在 Windows 上]

javascript - node.js 域是自动清理还是我必须调用 domain.dispose()

c++ - 如果未满足某些条件,从方法返回什么?

c++ - 如何使用 C++ 剪切或删除字符串中的某些字符

c++ - 在函数指针赋值中强制转换

c++ - 多态性实现

c++ - Ruby block ,C++ 中的 java 闭包

C# 可以在不捕获的情况下检查异常吗?

ruby - 捕获用于日志记录的 Ruby 异常,但不抛出它?

exception - 处理位图加载和处理可能