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

Wil*_*mKF 2 c++ exception throw

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

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

void test() {
  throw Error();
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 9

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

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