终止抛出异常的处理程序

时间:2014-09-26 16:09:11

标签: c++

我们假设以下代码:

#include <exception>
#include <stdexcept>
#include <iostream>

using namespace std;

int main()
{
    set_terminate([]{throw runtime_error("");});
    throw runtime_error("oops");
}
  

N3797,§18.8.3.1[terminate.handler] / 2:必需的行为:A   terminate_handler将在没有的情况下终止程序的执行   回到来电者那里。

这是未完成的行为。事实上会发生什么?

1 个答案:

答案 0 :(得分:2)

  

它未完成的行为。事实上会发生什么?

你不知道。

您可以检查生成的机器代码,以确定在给定平台上实际发生的情况,但不要这样做。就C ++标准而言,UB意味着你不在网格中。下次修改编译器,链接器,glibc或其他一些东西时,你可能会得到完全不同的行为。你甚至可以从一次又一次的运行中获得不同的行为。

很少有&#34; nevers&#34;在编程中,但我会承诺从不刻意写和依赖于未定义行为的行为