dynamic_cast, std::bad_cast
От: Аноним  
Дата: 11.10.10 08:59
Оценка:
Немного непонятно что происхлодит при dynamic_cast когда преобразуются ссылки (не указатели). Если тип неверный то вроде бы кидается исключение std::bad_cast. std::bad_cast относится к STL? На платформах где нет STL как это работает.
Re: dynamic_cast, std::bad_cast
От: Lorenzo_LAMAS  
Дата: 11.10.10 09:08
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>Немного непонятно что происхлодит при dynamic_cast когда преобразуются ссылки (не указатели). Если тип неверный то вроде бы кидается исключение std::bad_cast. std::bad_cast относится к STL? На платформах где нет STL как это работает.


Понятие STL — времен царя Гороха. Есть стандартная библиотека. Есть реализации freestanding и hosted.. Исключения нужные есть и там, и там.
Как работает доисторическая реализация, не соответствующая стандарту — личное дело этой реализации и как там динамик каст себя ведет — бог его знает.
Of course, the code must be complete enough to compile and link.
Re: dynamic_cast, std::bad_cast
От: placement_new  
Дата: 11.10.10 09:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Немного непонятно что происхлодит при dynamic_cast когда преобразуются ссылки (не указатели). Если тип неверный то вроде бы кидается исключение std::bad_cast. std::bad_cast относится к STL? На платформах где нет STL как это работает.


А как связаны STL и dynamic_cast? И что это за платформы где нет STL? Там С++ видимо нет.
Re[2]: dynamic_cast, std::bad_cast
От: BogusCoder Швеция  
Дата: 11.10.10 09:17
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>Понятие STL — времен царя Гороха. Есть стандартная библиотека.

Мне показалось или вы както странно трактуете эти три буквы? STL и есть стандартная библиотека, входящая в стандарт, от царя Гороха и по сей день. Как верно заметили, где нет STL там видимо нет и с++
Re[3]: dynamic_cast, std::bad_cast
От: Lorenzo_LAMAS  
Дата: 11.10.10 09:29
Оценка: :))
BC>Мне показалось или вы както странно трактуете эти три буквы? STL и есть стандартная библиотека, входящая в стандарт, от царя Гороха и по сей день. Как верно заметили, где нет STL там видимо нет и с++
Что вам кажется, знаете только вы сами. Аббревиатуру STL использовали в 90х, в наши есть С++ и его стандартная библиотека, которую уже не называют STL.
Of course, the code must be complete enough to compile and link.
Re: dynamic_cast, std::bad_cast
От: Bell Россия  
Дата: 11.10.10 09:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Немного непонятно что происхлодит при dynamic_cast когда преобразуются ссылки (не указатели). Если тип неверный то вроде бы кидается исключение std::bad_cast.

Именно так.

А>std::bad_cast относится к STL?

Как совершенно справедливо заметил Lorenzo_LAMAS, понятие STL несколько устарело — такой аббревиатуры в тексте стандарта нет вообще. Но во избежание недоразумений будем считать, что STL является частью стандартной библиотеки С++, а потому std::bad_cast — часть стандартной библиотеки.

А>На платформах где нет STL как это работает.

На платформах, которые не полностью поддерживают стандартную библиотеку, это должно быть отражено в документации.

Если не секрет, о какой платформе речь?
Любите книгу — источник знаний (с) М.Горький
Re[2]: dynamic_cast, std::bad_cast
От: Mr.Delphist  
Дата: 11.10.10 10:07
Оценка:
Здравствуйте, placement_new, Вы писали:

_>А как связаны STL и dynamic_cast? И что это за платформы где нет STL? Там С++ видимо нет.


Например, разработка под Symbian. C++ есть, STL нету.
Re[3]: dynamic_cast, std::bad_cast
От: Lorenzo_LAMAS  
Дата: 11.10.10 10:10
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Здравствуйте, placement_new, Вы писали:


_>>А как связаны STL и dynamic_cast? И что это за платформы где нет STL? Там С++ видимо нет.


MD>Например, разработка под Symbian. C++ есть, STL нету.


А dynamic_cast там вообще есть?
Of course, the code must be complete enough to compile and link.
Re[4]: dynamic_cast, std::bad_cast
От: Lorenzo_LAMAS  
Дата: 11.10.10 10:45
Оценка: :)
MD>>Например, разработка под Symbian. C++ есть, STL нету.

L_L>А dynamic_cast там вообще есть?


Ок, похоже, нет: http://wiki.forum.nokia.com/index.php/Typecasting_in_Symbian. Так что, и С++ нету, а есть некий диалект.
Of course, the code must be complete enough to compile and link.
Re: dynamic_cast, std::bad_cast
От: Masterkent  
Дата: 11.10.10 10:50
Оценка:
std::bad_cast относится к language support library. К стандартной библиотеке шаблонов его вряд ли можно причислить.
Re: dynamic_cast, std::bad_cast
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.10.10 19:57
Оценка: :))
Здравствуйте, Аноним, Вы писали:

А>Немного непонятно что происхлодит при dynamic_cast когда преобразуются ссылки (не указатели). Если тип неверный то вроде бы кидается исключение std::bad_cast. std::bad_cast относится к STL? На платформах где нет STL как это работает.


Не хочу вдаваться в рассуждения о том, что есть STL, замечу, что даже в самом современном компиляторе исключения, как правило, могут быть отключены опцией командной строки. Что в этом случае вернет dynamic_cast — полагаю, 0.
И, кстати, не уверен, что dynamic_cast должен бросать исключение — скорее возврат 0 это более ожидаемая реакция.
MSDN пишет, что:
[msdn]
In Visual C++ 2005, there are two breaking changes in the behavior of dynamic_cast in managed code:
dynamic_cast to a pointer to the underlying type of a boxed enum will fail at runtime, returning 0 instead of the converted pointer.
dynamic_cast will no longer throw an exception when type-id is an interior pointer to a value type, with the cast failing at runtime. The cast will now return the 0 pointer value instead of throwing.
[/msdn]
Маньяк Робокряк колесит по городу
Re[2]: dynamic_cast, std::bad_cast
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.10.10 20:10
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, Аноним, Вы писали:


А>>Немного непонятно что происхлодит при dynamic_cast когда преобразуются ссылки (не указатели). Если тип неверный то вроде бы кидается исключение std::bad_cast. std::bad_cast относится к STL? На платформах где нет STL как это работает.


M> Не хочу вдаваться в рассуждения о том, что есть STL, замечу, что даже в самом современном компиляторе исключения, как правило, могут быть отключены опцией командной строки. Что в этом случае вернет dynamic_cast — полагаю, 0.


Полную ерунду написал, простите. Невнимательно прочитал исходное сообщение. Тем не менее, исключения могут быть отключены даже в самом современном компиляторе, и что вернет dynamic_cast — непонятно. Как минимум — будет варнинг.
Маньяк Робокряк колесит по городу
Re: dynamic_cast, std::bad_cast
От: d.4 Россия  
Дата: 12.10.10 08:59
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Немного непонятно что происхлодит при dynamic_cast когда преобразуются ссылки (не указатели). Если тип неверный то вроде бы кидается исключение std::bad_cast. std::bad_cast относится к STL? На платформах где нет STL как это работает.


С DMC (Digital Mars C++ Compiler) по умолчанию STL не идет.
Watcom-овский компилер имеет сильно урезанный STL.

Оба объявляют std::bad_cast в файле <typeinfo>. Относится он к STL или нет — как авторы компилятора посчитают.

В объектных файлах CRT уже присутствует код, выполняемый для dynamic_cast, и даже имплементация отдельных функций-членов bad_cast (например, виртуальный метод what() в DMC).
Внутренностям dynamic_cast, в общем-то и не важно, объявлен ли у вас в коде символ std::bad_cast. Главное, чтоб он в исходниках CRT присутствовал.
dynamic_cast ref
Re[3]: dynamic_cast, std::bad_cast
От: Erop Россия  
Дата: 12.10.10 10:41
Оценка:
Здравствуйте, Marty, Вы писали:

M>Полную ерунду написал, простите. Невнимательно прочитал исходное сообщение. Тем не менее, исключения могут быть отключены даже в самом современном компиляторе, и что вернет dynamic_cast — непонятно. Как минимум — будет варнинг.



Как вариант не скомпилячит...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: dynamic_cast, std::bad_cast
От: Masterkent  
Дата: 12.10.10 11:18
Оценка:
d.4:

d.4>С DMC (Digital Mars C++ Compiler) по умолчанию STL не идет.


Судя по этим тестам, у него вообще соответствие стандарту так себе. В частности, там неправильно работает typeid(*null_pointer_value_of_polymorphic_type).

d.4>Оба объявляют std::bad_cast в файле <typeinfo>. Относится он к STL или нет — как авторы компилятора посчитают.


Если называть STL всё подряд, то смысл аббревиатуры утрачивается.
Re: dynamic_cast, std::bad_cast
От: _Hooter Россия  
Дата: 12.10.10 15:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Немного непонятно что происхлодит при dynamic_cast когда преобразуются ссылки (не указатели). Если тип неверный то вроде бы кидается исключение std::bad_cast. std::bad_cast относится к STL? На платформах где нет STL как это работает.


А что за платформа, если не секрет?

Вообще, если речь идет о том, как обрабатывать ошибки cast'а при отключенных исключениях, то решение тут одно — не использовать код, который может сгенерировать исключение.

Проблема заключается в том, что по Стандарту при dynamic_cast ссылок исключение должно быть сгенерировано в случае ошибки. Если же программист по каким-то причинам отключил обработку исключений при компиляции, то по Стандарту он должен использовать dynamic_cast для указателей. Стандарт оговаривает две формы dynamic_cast и переносит всю ответственность за использование на программиста. Поэтому, так как по Стандарту исключение должно быть сгенерировано, то исключение будет сгенерировано в любом случае, даже если программист отключил обработку исключений при компиляции. Далее при возникновении исключения, если обработчиков исключений нет, произойдет простой вызов terminate() и процесс завершится.

Всё это правда, если реализация стандартной библиотеки соответствует Стандарту. Если же реализация не соответствует Стандарту, то в документации к ней долно быть описание. Однако при использовании такой неСтандартной библиотеки нужно понимать, что скорее всего у такого кода будут проблемы с портированием.
Re[5]: dynamic_cast, std::bad_cast
От: Mr.Delphist  
Дата: 13.10.10 08:37
Оценка: 4 (1)
Здравствуйте, Lorenzo_LAMAS, Вы писали:

MD>>>Например, разработка под Symbian. C++ есть, STL нету.


L_L>>А dynamic_cast там вообще есть?


L_L>Ок, похоже, нет: http://wiki.forum.nokia.com/index.php/Typecasting_in_Symbian. Так что, и С++ нету, а есть некий диалект.


Там даже не один, а два диалекта, потому что компилеров два: под эмулятор и под железку. А точнее, даже три, ибо под железку есть GCCE и есть платный ARM-компилер. Код, особенно с шаблонами, имеет "ньюансы собираемости" под этим зоопарком.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.