Не существует строгой универсальной причины, по которой вам не следует этого делать, но это некрасиво и трудно читать.
Если вы решили, что выбрасывать исключение - это правильно,вам, вероятно, следует пересмотреть другие варианты дизайна: зачем вам вообще нужен указатель?Если вы придерживаетесь ссылок, проблем нет: Foo & foo = dynamic_cast<Foo&>(fooBaseRef);
.
Лично я бы сказал, что если у вас есть голые указатели в C ++, у вас какое-то устаревшее мышление, поэтому вам, вероятно, следует простодобавить нуль-проверку и бросить вручную.С другой стороны, если вы хотите использовать идиоматический современный C ++, предпочитайте ссылки полностью, и вы получите свое исключение бесплатно.