要引发的对象的构造函数是否可以引发异常
Can a constructor for an object to be thrown throw an exception?
在C++中,它是否对将要抛出的对象的构造函数有效,该构造函数将自己抛出异常? 换句话说,当我们还在构建要投掷的对象时,我们是否还在投掷
?struct Error {
Error() {
if (someCondition()) {
throw anotherObject();
}
}
};
void test() {
throw Error();
}
抛出表达式需要throw Error();
,但是是的,这是有效的。
在抛出Error
对象之前,必须构造它。 也就是说,必须先计算子表达式Error()
,然后才能在完整表达式中计算throw
运算符。 如果子表达式Error()
本身的求值抛出异常,则不会计算完整表达式的其余部分(即throw
)。
相关文章:
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 对象初始化后在C++中显示 char 数组时的异常行为
- 如何捕获 C++ 内置异常对象
- 异常对象的最后一个潜在销毁点
- 异常表达式创建的异常对象的类型
- 异常对象的静态类型
- 抛出非异常对象
- 异常对象寿命
- 关于异常对象的双重销毁需要解释
- 异常对象在哪里有其空间、堆或堆栈,以及如何在不同的类中访问它
- 如果引发的异常始终是异常对象的副本,为什么不调用此复制构造函数?
- 通过引用捕获(使用 catch)时异常对象的范围
- 存储在异常对象中的信息:在异常中提供字符串
- 当一个异常对象被销毁时(它可以被控制吗)
- 如果我跳出带有"goto"的捕获块,我能保证异常对象将被释放吗?
- 通过引用抛出异常对象是否合适?
- 可以rethrow_exception真正抛出相同的异常对象,而不是副本
- c++能消除异常对象类型的歧义吗?
- 作为抛出异常对象的结构基类