Есть ли цель использования 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
не будет. В моем случае это не так.
Есть ли цель использовать dynamic_cast, когда возвращаемое значение не проверяется на NULL?
Вы не можете проверить nullptr
если вы уверены, что экземпляр класса этого типа по другому вопросу. Почему бы не использовать static_cast
в этом случае? Возможно, вы не сможете использовать static_cast
когда задействовано виртуальное наследование. Подробности можно найти в ответах на этот вопрос: Почему static_cast нельзя использовать для понижения, когда задействовано виртуальное наследование?
Других решений пока нет …