【发布时间】:2012-04-03 05:58:52
【问题描述】:
C++11 引入了一种完成程序执行的新方法——std::quick_exit。
引用 N3242 18.5(第 461 页):
[[noreturn]] void quick_exit(int status) noexcept;效果:调用
at_quick_exit注册的函数被调用 以他们注册的相反顺序,除了一个函数 应在任何先前注册的函数之后调用 在注册时已经被调用。对象不得 由于调用quick_exit而被销毁。如果控制离开quick_exit调用的注册函数,因为该函数没有 为抛出的异常提供处理程序,应调用terminate()。 [注意:at_quick_exit可能会从不同的 线程比注册它的线程,所以注册函数应该 不依赖于具有线程存储持续时间的对象的身份。 — end note ] 调用注册函数后,quick_exit会调用_Exit(status)。 [ 注意:标准文件缓冲区不会被刷新。参见:ISO C 7.20.4.4。 ——尾注]
由于std::abort(void) 和std::_Exit(int status) 的定义仅在将状态传递给父进程的能力上有所不同,因此提出了我的问题。
这是否意味着std::quick_exit 和std::abort 在语义上的唯一区别是std::quick_exit 调用使用std::at_quick_exit 注册的函数并允许设置返回状态?
引入此功能的基本原理是什么?
【问题讨论】:
标签: c++ c++11 language-lawyer