Здравствуйте, Аноним, Вы писали:
А>Немного непонятно что происхлодит при dynamic_cast когда преобразуются ссылки (не указатели). Если тип неверный то вроде бы кидается исключение std::bad_cast. std::bad_cast относится к STL? На платформах где нет STL как это работает.
А что за платформа, если не секрет?
Вообще, если речь идет о том, как обрабатывать ошибки cast'а при отключенных исключениях, то решение тут одно — не использовать код, который может сгенерировать исключение.
Проблема заключается в том, что по Стандарту при dynamic_cast ссылок исключение должно быть сгенерировано в случае ошибки. Если же программист по каким-то причинам отключил обработку исключений при компиляции, то по Стандарту он должен использовать dynamic_cast для указателей. Стандарт оговаривает две формы dynamic_cast и переносит всю ответственность за использование на программиста. Поэтому, так как по Стандарту исключение должно быть сгенерировано, то исключение будет сгенерировано в любом случае, даже если программист отключил обработку исключений при компиляции. Далее при возникновении исключения, если обработчиков исключений нет, произойдет простой вызов terminate() и процесс завершится.
Всё это правда, если реализация стандартной библиотеки соответствует Стандарту. Если же реализация не соответствует Стандарту, то в документации к ней долно быть описание. Однако при использовании такой неСтандартной библиотеки нужно понимать, что скорее всего у такого кода будут проблемы с портированием.