首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >析构函数和noexcept

析构函数和noexcept
EN

Stack Overflow用户
提问于 2013-03-31 01:47:36
回答 1查看 7.6K关注 0票数 35

我对析构函数和noexcept有点困惑。我的理解是,在C++11中,任何析构函数,包括用户定义的,都是隐式的noexcept(true),即使我们从它throw。如果出于某种原因想要这样做,就必须显式地指定noexcept(false)

我看到的恰恰相反--在GCC 4.7.2中,用户定义的析构函数,无论类和析构函数有多原始,都是隐式的noexcept(false)。这里我漏掉了什么?用户定义的析构函数有没有隐藏的陷阱?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-31 01:55:07

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

代码语言:javascript
复制
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!");
}
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15721544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档