std::terminate
来自cppreference.com
                    
                                        
                    
                    
                                                            
                    |   定义于头文件  <exception>
  | 
||
|   void terminate();  | 
(C++11 前) | |
|   [[noreturn]] void terminate() noexcept;  | 
(C++11 起) | |
C++ 运行时在程序因任何下列原因不能继续时调用 std::terminate() :
1) 未捕捉抛出的异常(此情况下是否进行任何栈回溯是实现定义的)
2) 在处理仍未经由异常捕捉的异常时(例如由某局部对象的析构函数,或构造 catch 子句参数的复制构造函数抛出),由异常处理机制所直接调用
3) 静态或线程局域 (C++11 起)对象的构造函数或析构函数抛出异常
 | (C++17 前) | 
| 
 7) 违反 noexcept 说明(此情况下是否进行任何栈回溯是实现定义的) 
8) 为一个不保有被捕获异常的对象调用 std::nested_exception::rethrow_nested 
9) 从 std::thread 的起始函数抛出异常 
10) 可结合的 std::thread 被析构或赋值 
11) std::condition_variable::wait、 std::condition_variable::wait_until 或 std::condition_variable::wait_for 无法达成其前条件(例如若重锁定互斥抛出) 
 | 
(C++11 起) | 
| (C++17 起) | 
亦可直接从程序调用 std::terminate() 。
任何情况下, std::terminate 调用当前安装的 std::terminate_handler 。默认的 std::terminate_handler 调用 std::abort 。
| 
 若析构函数在栈回溯时重设 terminate_handler ,且后面的回溯导致调用   | 
(C++11 前) | 
| 
 若析构函数在栈回溯时重设 terminate_handler ,则若后面的栈回溯导致调用   | 
(C++11 起) | 
参数
(无)
返回值
(无)
注解
若不想要处理函数机制,例如因为它要求可能增加二进制大小的原子操作,则在非正常终止程序时直接调用 std::abort 更适合。
某些编译器内建子程序,例如 __builtin_trap ( gcc、 clang 及 icc )或 __debugbreak ( msvc ),能用于尽快终止程序。
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| DR | 应用于 | 出版时的行为 | 正确行为 | 
|---|---|---|---|
| LWG 2111 | C++11 |  在栈回溯期间调用 set_terminate 的效果异于 C++98 并破坏一些 ABI
 | 
令它未指定 | 
参阅
|    std::terminate 所调用的函数类型  (typedef)  | |
|   导致非正常的程序终止(不进行清理)  (函数)  |