ejemplo dynamic_cast c++ null dynamic-cast

ejemplo - dynamic_cast c++



Portably seguro para pasar NULL/cero a dynamic_cast? (3)

§5.2.7 / 4:

Si el valor de v es un valor de puntero nulo en el caso del puntero, el resultado es el valor de puntero nulo de tipo R.

Por lo tanto, usted no tiene que buscar un puntero nulo. Lo mismo ocurre con la eliminación del operador, la eliminación de un puntero nulo no tiene ningún efecto.

Por costumbre, para marcar punteros nulos, a veces he escrito:

MyClass * c = someBasePtr ? dynamic_cast<MyClass*>(someBasePtr) : 0; if (c) {...

En efecto, la comprobación de un puntero nulo antes de pasar a la conversión dinámica, y también la comprobación de la devolución.

Luego leo en la documentación de MSDN

Dynamic_cast convierte un valor de puntero nulo en el valor de puntero nulo del tipo de destino.

Aparece entonces que podría quitar el?: Construcción segura. ¿Es este C ++ portátil ?

Tal que el nuevo código sería

MyClass * c = dynamic_cast<MyClass*>(someBasePtr); if (c) {...

Por supuesto, suponiendo que someBasePtr es nulo o válido, es decir, no es un comodín que apunta a la basura ...


Sí, puedes usar dynamic_cast en un puntero nulo.


Sí, verifique 5.2.7.4 en el estándar.