Здравствуйте, Ops, Вы писали:
Ops>Здравствуйте, AlexGin, Вы писали:
AG>>dynamic_cast — с преобразованием указателя вернёт null (указатели есть в ANSI-C),
Ops>Только вот ничего подобного dynamic_cast в C нет, так что можно было бы и бросить. Так сделано скорее всего, чтобы можно было разруливать это без исключений. Но это противоречит "В стиле C++ всё таки — кинуть исключение".
Да,
dynamic_cast в C, естественно, нет. Но так как он возвращает pointer, то null-pointer здесь как бы логичен.
AG>>dynamic_cast — с преобразованием ссылки кинет исключение (ссылки появились в C++) — в общем логично.
Ops>Это конечно, со ссылками я других вариантов вообще не вижу.
На сегодняшний день, IMHO наиболее востребованный вариант вообще НЕ
dynamic_cast, а
std::dynamic_pointer_cast<...>(...) — вызов его в случае неудачи возвращает
nullptr.
http://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast
http://www.cplusplus.com/reference/memory/dynamic_pointer_cast