Информация об изменениях

Сообщение Re[5]: Набор исключений метода от 15.06.2018 12:08

Изменено 15.06.2018 12:38 AlexGin

Re[5]: Набор исключений метода
Здравствуйте, 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
Re[5]: Набор исключений метода
Здравствуйте, 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