De façon portable sans passer NULL/zéro de dynamic_cast?
De sortir de l'habitude de vérifier pointeurs nuls, j'ai parfois écrit:
MyClass * c = someBasePtr ? dynamic_cast<MyClass*>(someBasePtr) : 0;
if (c) {...
En effet, la vérification par un pointeur null avant de passer à la dynamique de fonte, et également la vérification de la déclaration.
J'ai ensuite lu dans la documentation MSDN
Une valeur de pointeur null est converti à
la valeur de pointeur null de la
type de destination par dynamic_cast.
Il apparaît ensuite que je pouvais enlever la ?: construire en toute sécurité. Est-ce C++ portable?
Tels que le nouveau code serait
MyClass * c = dynamic_cast<MyClass*>(someBasePtr);
if (c) {...
Bien sûr, en supposant que someBasePtr est soit null soit valide, c'est à dire pas sauvage pointant à la poubelle...
Vous devez vous connecter pour publier un commentaire.
§5.2.7/4:
De sorte que vous n'avez pas à vérifier pour un pointeur null vous-même. En va de même pour la suppression de l'opérateur, la suppression d'un pointeur null n'a aucun effet.
Oui, vous pouvez utiliser
dynamic_cast
sur un pointeur null.Oui, vérifiez 5.2.7.4 dans la norme.