![]() |
3. Простой вопрос о переброске | ||
Каким будет результат выполнения приведенной программы? |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include <iostream> struct left { void foo() const { std::cout << "left::foo()" << std::endl; } }; struct right { void foo() const { std::cout << "right::foo()" << std::endl; } }; struct middle: public left, public right { }; int main() { try { throw middle(); } catch(left const& lft) { lft.foo(); try { throw; } catch(right const& rgt) { rgt.foo(); } } return 0; } |
Вопрос действительно очень простой. Вот правильный ответ. | ||
На экране вы увидите обе надписи. Дело в том, что переброска (throw без параметра) оперирует тем же типом, который участвовал в генерации исключения, а не тем, который был пойман. То есть если заменить throw на throw left, то исключение не будет поймано. |
|
Статистика |
|