我想在默认值构造的类成员中处理异常。像这样:
int func()
{
throw 9.0;
return 9;
}
struct T
{
T() try {
}
catch(...)
{
cout << __func__ << endl;
}
int a{func()};
} ;
是否有可能?最新的ISO C ++标准对此有何说明?
编辑:我实际上验证了我自己可以在大多数编译器上使用,但是定义是否明确,我通常应该使用这种结构吗?
是否有可能?
是的,该异常将由函数级处理程序处理,就像成员的初始化程序抛出的其他异常一样。请注意,在构造函数的function-try-block中,处理异常后将其抛出。如果子对象的初始化失败,这是您想要的,因为完整的对象无效。
最新的ISO C ++标准对此有何说明?
我还没有C ++ 14,但是C ++ 11说:
15/4:在执行复合语句期间,或者对于构造函数和析构函数,分别在类的子对象的初始化或销毁过程中引发的异常将控制权转移到同一函数中的try-try-block中的处理程序在try块执行期间抛出的异常异常将控制权转移给其他处理程序。
和15.3 / 15指定在这种情况下将其重新抛出。
我通常应该使用这种结构吗?
可能不是-您几乎无能为力地处理子对象初始化的失败,因此捕获和重新抛出异常通常毫无意义。您可能希望在异常通过时报告错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句