Я перебежать проблема кодирования, что у меня возникают проблемы с пониманием (обратите внимание на строку с меткой // -):Классы и обработка исключений в 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, и я не понимаю, почему. Я чувствую, что это может иметь какое-то отношение к сфере действия деструкторов, но мои попытки найти информацию об этом не были успешными, потому что я не совсем уверен, что изучать. Кто-нибудь сможет объяснить, что здесь происходит, или просто название концепции, эта проблема иллюстрирует, чтобы я мог ее исследовать? Любая помощь приветствуется.
X2 также является X1, и захват для X1 является первым, поэтому он запускается. – Vality
Какие деструкторы? Здесь нет деструкторов. – EJP
И что вы подразумеваете под «областью деструкторов»? – EJP