gpt4 book ai didi

c++ - 析构函数和 noexcept

转载 作者:IT老高 更新时间:2023-10-28 12:51:52 28 4
gpt4 key购买 nike

我对析构函数和 noexcept 有点困惑。我的理解是,在 C++11 中,任何析构函数,包括用户定义的,都是隐含的 noexcept(true),即使我们从中 throw 也是如此。如果出于某种原因他们希望这样,则必须明确指定 noexcept(false)

我看到完全相反的情况——在 GCC 4.7.2 中,用户定义的析构函数,无论类和析构函数多么原始,都是隐含的 noexcept(false)。我在这里想念什么?用户定义的析构函数是否存在一些隐藏的问题?

最佳答案

这是 known bug (归功于 OP 查找错误报告),并且它似乎已在 GCC 4.8.0 中修复。例如,下面的静态断言将在 GCC 4.7.2 上触发,但不会在 GCC 4.8.0 上触发:

struct X
{
~X() { };
};

int main()
{
X x;

// This will not fire even in GCC 4.7.2 if the destructor is
// explicitly marked as noexcept(true)
static_assert(noexcept(x.~X()), "Ouch!");
}

关于c++ - 析构函数和 noexcept,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15721544/

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