2

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

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

void test() {
  throw Error();
}
4

1 回答 1

9

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

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

于 2012-10-04T23:29:34.993 回答