我们假设以下代码:
#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:必需的行为:Terminate_handler应终止程序的执行而不返回调用者。
这是不确定的行为。实际上会发生什么?
这是不确定的行为。实际上会发生什么?
你不知道
您可以检查最终的机器代码,以确定在给定平台上实际发生的事情,但是没有。UB意味着您可能会脱离C ++标准。下次修补编译器,链接器,glibc或百万种其他内容时,您将获得完全不同的行为。您甚至可能会从一次运行中得到不同的行为。
编程中很少有“新手”,但我将承诺永远不要刻意编写和依赖未定义行为的行为
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句