终止引发异常的处理程序
terminate handler that throw exception
我们假设以下代码:
#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的行为
相关文章:
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 为什么我的 IExtractIcon 处理程序没有被调用?
- 在遍历处理程序的向量时注册和注销处理程序
- 有可能在信号处理程序中设置promise吗
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 通过安装信号处理程序关闭多线程应用程序
- QDateTime::toString() 在退出处理程序中使用时失败
- 如何在 WindowProc 处理程序中区分箭头键和数字键盘?
- async_write完成处理程序最早何时完成?
- C++事件系统 - 多态事件和事件处理程序
- 具有shared_ptr的处理程序中的分段错误
- 为什么我的信号处理程序只执行一次?
- GTK C++:找不到信号处理程序 您是否使用 -rdynamic 进行了编译?
- 如何使用从处理程序调度的最终回调将响应异步返回给调用方on_read?
- C++ 在信号处理程序后继续执行
- wxWidgets 拖放文件事件处理程序初始化问题(无效static_cast)
- 某些 boost::asio 异步函数是否将处理程序连接到操作,以便处理程序被触发一次?
- 没有信号处理程序的POSIX定时器的目的是什么?
- 处理程序的模块列表中有一个错误的模块"WebSocketModule"