ClassThatMayThrowInCtor

ClassThatMayThrowInCtor

考虑一个例子:

class ClassThatMayThrowInCtor
{
     ClassThatMayThrowInCtor()
     {
          if (g_unlucky) throw "Exception";
     }
};

class Aggregate
{
     ClassThatMayThrowInCtor m_member;
};

据我所知,在某些情况下,C++ 14中的编译器可能会生成默认的ctor,即noexcept

是在这种情况下,还是会理解,由于成员的默认ctor不提供任何此类保证,因此也不应该提供?

在某些情况下,被要求提供上述声明的引用,我未能在标准中找到它,但是Andrzej's blog确实提到了:



(强调我的)

最佳答案

来自 [except.spec] :



隐式声明的Aggregate的默认构造函数直接调用允许所有异常的ClassThatMayThrowInCtor::ClassThatMayThrowInCtor(),因此Aggregate::Aggregate()允许所有异常,而不是noexcept

10-07 15:56