Использование dynamic_cast без проверки нуля

Есть ли цель использования dynamic_cast когда возвращаемое значение не проверяется на NULL? Если я смотрю на базу кода и проверяю его на пустое значение, которое она опускает в возвращаемом значении, возможно, было бы так же хорошо использовать static_cast?

A *a = dynamic_cast<A *>(b);
foo(*a);   //might as well have used a static_cast

Я прочитал все, что Google предоставляет по этому вопросу, и кажется, что проверка на нулевое значение является единственной причиной, но я еще не видел, чтобы кто-то вышел и сказал: «dynamic_cast без нулевой проверки — это пустая трата циклов (и возможно вздутие кода с RTTI).

Изменить: мне сказали, что если есть виртуальное наследование между типами, что static_cast потерпит неудачу где dynamic_cast не будет. В моем случае это не так.

1

Решение

Есть ли цель использовать dynamic_cast, когда возвращаемое значение не проверяется на NULL?

Вы не можете проверить nullptr если вы уверены, что экземпляр класса этого типа по другому вопросу. Почему бы не использовать static_cast в этом случае? Возможно, вы не сможете использовать static_cast когда задействовано виртуальное наследование. Подробности можно найти в ответах на этот вопрос: Почему static_cast нельзя использовать для понижения, когда задействовано виртуальное наследование?

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]