要引发的对象的构造函数是否可以引发异常

Can a constructor for an object to be thrown throw an exception?

本文关键字:异常 对象 构造函数 是否      更新时间:2023-10-16

在C++中,它是否对将要抛出的对象的构造函数有效,该构造函数将自己抛出异常? 换句话说,当我们还在构建要投掷的对象时,我们是否还在投掷

struct Error {
  Error() {
    if (someCondition()) {
      throw anotherObject();
    }
  }
};
void test() {
  throw Error();
}

抛出表达式需要throw Error();,但是是的,这是有效的。

在抛出Error对象之前,必须构造它。 也就是说,必须先计算子表达式Error(),然后才能在完整表达式中计算throw运算符。 如果子表达式Error()本身的求值抛出异常,则不会计算完整表达式的其余部分(即throw)。