で例外処理Iは、(//でタグ付けされた行に注意 - )私はトラブルの理解を持っていた符号化問題全体を実行しました:クラスとC++
#include <iostream>
using namespace std;
class X { };
class X0 { };
class X1: public X0 { };
class X2: public X1 { };
void f(int i) {
if (i == 0) {
throw X0();
} else if (i == 1) {
throw X1();
} else if (i == 2) {
throw X2();
} else {
throw X();
}
}
int main(int argc, char* argv[]) {
try {
f(0); //-
} catch (X1) {
cout << "A" << endl;
} catch (X2) {
cout << "B" << endl;
} catch (X0) {
cout << "C" << endl;
} catch (...) {
cout << "D" << endl;
}
}
このコードの出力はCであるが、予想通り。タグ付き行を "f(1);"に変更すると出力も期待どおりのAです。
ただし、タグ付きの行を「f(2);」に変更すると、答えはでも Aです。私はその理由を理解していません。デストラクタの範囲と関係があるかもしれないと思うが、何を勉強すればよいか分からないので、情報を見つけようとする試みは成功していない。誰でもここで起こっていることを説明することができますか、またはこの問題が示している概念の名前だけで、私はそれを研究することができますか?どんな助けもありがとうございます。それは同様X1
キャッチX2
ため、X1
からそうでない場合は、キャッチを得られるよう
X2もX1であり、X1のキャッチが最初であるためトリガーになります。 – Vality
デストラクタとは?ここにデストラクタはありません。 – EJP
「デストラクタの範囲」とはどういう意味ですか? – EJP