终止引发异常的处理程序

terminate handler that throw exception

本文关键字:处理 程序 异常 终止      更新时间:2023-10-16

我们假设以下代码:

#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[终止处理程序]/2:要求的行为:Aterminate_handler应终止程序的执行返回到呼叫者。

这是不可侵犯的行为。事实上会发生什么?

这是不可侵犯的行为。事实上会发生什么?

你不知道。

您可以检查生成的机器代码,以确定在给定的平台上实际会发生什么,但不要这样做。UB意味着你已经脱离了网格,就像C++标准一样。下一次,当你修补你的编译器、链接器、glibc或无数其他东西时,你可能会得到完全不同的行为。你甚至可以在不同的跑步中获得不同的行为。

编程中很少有"never",但我会承诺从不故意编写和依赖Undefined behavior的行为