![]() |
20. Срезка и исключения | ||
Как вы считаете, позволит ли компилятор срезку во время перехвата исключения? Что будет на консоли? |
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 | #include <iostream> class base { }; class derived : public base { }; int main() { try { throw derived(); } catch(base) { std::cout << "base" << std::endl; } catch(derived) { std::cout << "derived" << std::endl; } return 0; } |
Правильный ответ. | ||
К сожалению, позволит. В этот раз на экране вы увидите: Base Поиск подходящего catch происходит сверху вниз. Подходящим catch считается первый catch, для которого существует неявное преобразование (за некоторым исключением). Это одна из причин, по которой рекомендуется перехватывать исключения по ссылке. И по этой причине блоки catch обычно располагаются последовательно снизу вверх по иерархии классов. |
|
Статистика |
|