C ++ c-tor处理默认成员值构造异常?

AnArrayOfFunctions

我想在默认值构造的类成员中处理异常。像这样:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++ c-tor处理默认成员值构造异常?

来自分类Dev

C ++ 11,默认成员构造是件好事吗?

来自分类Dev

C ++,处理构造函数的异常

来自分类Dev

堆栈对象的C ++构造函数异常处理

来自分类Dev

C ++中类成员的默认值

来自分类Dev

在C#8.0中,有没有办法在类中公开默认成员实现?

来自分类Dev

C ++重新启用默认的c'tor?

来自分类Dev

异常处理C#

来自分类Dev

C ++成员在父子构造函数之间更改值

来自分类Dev

C ++成员变量在构造函数后丢失值

来自分类Dev

从构造函数C ++返回后丢失成员变量的值

来自分类Dev

结构中的默认成员值或默认构造函数参数?

来自分类Dev

C#泛型:成员的默认非空值

来自分类Dev

在C#中将默认值设置为成员类

来自分类Dev

C ++默认参数类成员

来自分类Dev

在C ++中由double默认构造函数分配的值

来自分类Dev

C ++构造函数中参数的默认值

来自分类Dev

C ++中隐式Default构造函数的默认值

来自分类Dev

C ++构造函数中参数的默认值

来自分类Dev

C ++重载异常的构造函数

来自分类Dev

C ++结构默认构造函数

来自分类Dev

C ++默认值

来自分类Dev

在C ++中处理可选参数/默认值的最佳方法

来自分类Dev

C ++ 11:使用非静态成员函数作为类构造函数中的默认参数

来自分类Dev

C ++初始化程序列表成员仍在调用默认构造函数?

来自分类Dev

C++ 如何使用隐藏的默认构造函数初始化成员?

来自分类Dev

C++ 为 Struct 及其继承的成员调用默认构造函数

来自分类Dev

C ++处理异常的“正确”方法

来自分类Dev

C ++ STL streambuf异常处理