【问题标题】:Can a constructor for an object to be thrown throw an exception?要抛出的对象的构造函数可以抛出异常吗?
【发布时间】:2012-10-04 23:26:25
【问题描述】:

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

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

void test() {
  throw Error();
}

【问题讨论】:

    标签: c++ exception throw


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 2012-01-21
      • 2020-08-07
      • 1970-01-01
      • 2021-10-31
      相关资源
      最近更新 更多