考虑一个例子:
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
。