gpt4 book ai didi

c++ - std::uncaught_exception 和 Microsoft __uncaught_exception 之间的区别?

转载 作者:太空宇宙 更新时间:2023-11-04 13:44:20 25 4
gpt4 key购买 nike

C++ 标准库似乎有 std::uncaught_exception , 微软有这个 exact function .

但微软也有__uncaught_exception .我在文档中看不到任何显着差异。那么,有区别吗?如果两者都可供我使用,我应该更喜欢其中一个,还是同时使用它们以确保万无一失?

// Option 1
if (uncaught_exception())
{
// report it.
}

// Option 2
if (__uncaught_exception())
{
// report it
}

// Option 3
if (uncaught_exception() || __uncaught_exception())
{
// report it
}

最佳答案

有没有区别,没多大关系。导致创建该功能的前提存在固有缺陷,它基本上是无用的。

该函数旨在测试以确定在执行此代码(析构函数或从析构函数调用的代码)时是否存在异常,这将表明堆栈正在展开并且第二个异常将终止程序。

除了它不会。两个异常不能在同一个堆栈帧中处于事件状态,但可以有多个异常在运行中。异常被抛出,堆栈开始展开,并且局部对象的析构函数之一最终调用了抛出异常的代码,而 try block 中。完全合法且很好,两个异常同时展开堆栈的不同部分。

函数 std::uncaught_exception 因此不能用于确定抛出新的异常是否会导致 std::terminate 被调用以及引发异常的主要原因设计丢失。以无用的功能结束。

我无法想象可以很好地利用 std::uncaught_exception 的任何用例。对于最初的预期目的,只需确保您的析构函数是 noexcept(true)(这是 C++11 及更高版本中的默认值)并且不要抛出

关于c++ - std::uncaught_exception 和 Microsoft __uncaught_exception 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26565250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com