2

C ++では、スローされるオブジェクトのコンストラクター自体が例外をスローすることは有効ですか?言い換えれば、スローするオブジェクトをまだ構築している間、私たちはまだスロー中ですか?

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

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

1 に答える 1

9

スロー式はである必要がありますがthrow Error();、はい、これは有効です。

オブジェクトをスローする前に、Errorオブジェクトを作成する必要があります。つまり、演算子を完全な式でError()評価する前に、部分式を評価する必要があります。throw部分式Error()自体の評価が例外をスローした場合、完全な式の残りの部分(つまり、throw)は評価されません。

于 2012-10-04T23:29:34.993 に答える