可以抛出对象的构造函数抛出异常吗?

时间:2012-10-04 23:26:26

标签: c++ exception throw

在C ++中,对于要抛出的对象的构造函数是否有效会引发异常?换句话说,当我们还在构建要抛出的对象时,我们还在抛出吗?

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

void test() {
  throw Error();
}

1 个答案:

答案 0 :(得分:9)

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

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