我们假设以下代码:
#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将在没有的情况下终止程序的执行 回到来电者那里。
这是未完成的行为。事实上会发生什么?
答案 0 :(得分:2)
它未完成的行为。事实上会发生什么?
你不知道。
您可以检查生成的机器代码,以确定在给定平台上实际发生的情况,但不要这样做。就C ++标准而言,UB意味着你不在网格中。下次修改编译器,链接器,glibc或其他一些东西时,你可能会得到完全不同的行为。你甚至可以从一次又一次的运行中获得不同的行为。
很少有&#34; nevers&#34;在编程中,但我会承诺从不刻意写和依赖于未定义行为的行为