Il ne peut pas donner erreur de compilation de temps en raison d'une relation de base dérivées peut exister à l'exécution en fonction de l'adresse des pointeurs étant casted. static_cast
réussit toujours, mais déclenchera undefined-behavior si vous ne lancez pas le bon type. dynamic_cast
peut échouer ou non, en vous disant si vous avez essayé de lancer le bon type ou non.
Donc, à mon avis, static_cast
devrait être utilisé pour abaissé seulement si le design peut établir qu'une telle possibilité existe. Un bon exemple de ceci est CRTP. C'est donc logique dans certaines situations mais essayez de l'éviter car c'est un comportement non défini.
RTTI est pas nécessaire pour static_cast
qui pourrait le rendre plus rapide théoriquement, mais je Commercera en tout temps un dynamic_cast
contre le comportement non défini qui static_cast
peut causer!
Utilisez le bouton '010' ou le retrait de 4 espaces pour le balisage de code. –
@sandeep, les instructions 'cout <<' de ces constructeurs sont-elles prévues? Pour autant que je vois, ils sont sans rapport avec la question, et seraient mieux enlevés. –
Il convient de noter que, même si cet extrait de code va bien se compiler, il aura un comportement ** indéfini **. Vous faites la promesse au compilateur que 'a' pointe vers un objet B, et que vous mentez à votre compilateur. Les démons nasaux sont en route. –