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