当我调用std :: abort()

时间:2016-03-29 17:02:51

标签: c++ exception visual-studio-2015 iostream abort

当我在Windows 10上的Visual Studio 2015中运行此代码时,看不到输出

That was unexpected

它适用于Linux上的gcc 5.3。

class X {};
class Y {};
class Z : public X {};
class W {};

void f() throw(X, Y)    // list what exceptions can be thrown
{
    int n = 0;
    if (n) throw X(); // OK
    if (n) throw Z(); // also OK
    throw W(); // will call std::unexpected()
}

int main() {
    std::set_unexpected([] {
        std::cout << "That was unexpected" << std::endl;
        std::abort();
    });
    f();
}

1 个答案:

答案 0 :(得分:4)

Visual C ++从未实现过异常规范,但接受了语法

无论如何,它们在C ++ 11及更高版本中已被弃用。

可能是主Windows C ++编译器不一致的结果。

同样,我记得Visual C ++从未实现过std::uncaught_exception,但对此我不太确定。在使用和依赖之前值得检查。 ... Doc-checked :{C ++ 2015的the documentation声明

  

在设备上,uncaught_exception仅在Windows CE 5.00及更高版本(包括Windows Mobile 2005平台)上受支持

因此,在桌面平台上,它显然得到了支持。