析构函数和noexcept

lap*_*apk 28 c++ destructor noexcept c++11

我对析构函数有点困惑noexcept.我的理解是,在C++ 11中,任何析构函数(包括用户定义的)都是隐含的noexcept(true),即使我们throw来自它.并且必须明确指定noexcept(false)他们是否因某种原因希望它是那样的.

我所看到的恰恰相反 - 与GCC 4.7.2一样,用户定义的析构函数,无论类和析构函数多么原始,都是隐含的noexcept(false).我在这里错过了什么?是否有一些隐藏的问题与用户定义的析构函数?

And*_*owl 18

这是一个已知的错误(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!");
}
Run Code Online (Sandbox Code Playgroud)

  • 我实际上并没有想到使用"bug"作为额外的搜索关键字.现在我做了(感谢你),这就出现了[Bug 56191](http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56191).谢谢你的快速反应! (4认同)