По привычке для проверки нулевых указателей я иногда писал:
MyClass * c = someBasePtr ? dynamic_cast<MyClass*>(someBasePtr) : 0;
if (c) {...
Фактически, проверяя нулевой указатель перед переходом к динамическому переносу, а также проверяя возврат.
Затем я читаю в документации MSDN
Значение нулевого указателя преобразуется в значение нулевого указателя тип назначения dynamic_cast.
Появляется, что я мог бы безопасно удалить конструкцию?:. Является ли этот перенос С++?
Таким образом, новый код будет
MyClass * c = dynamic_cast<MyClass*>(someBasePtr);
if (c) {...
Конечно, предполагая, что someBasePtr является либо нулевым, либо действительным, т.е. не диким, указывающим на мусор...