-
[casting] C vs C++
hello,
pourriez vous me dire dans quel cas j ai plustot interet � utiliser plustot que le cast C standard Contrairement au dynamic, static et cont cast, la :faq: (10.2.4) ne donne pas les point de comparaison avec le C standard.
merci d avance.
-
Salut,
L'op�rateur reinterpret_cast permet de convertir par exemple:
- Un pointeur vers n'importe quel type d'entier de taille suffisante
- Une valeur de type entier ou enum vers un pointeur
- Un pointeur de fonction vers un pointeur sur une fonction de type diff�rent
- Un pointeur sur un objet vers un pointeur sur un objet de type diff�rent
reinterpret_cast ne peut toutefois pas modifier le qualificatif de constance ou de volatilit� d'une variable.
Thierry
-
Citation:
Envoy� par mujigka
- Un pointeur vers n'importe quel type d'entier de taille suffisante
- Une valeur de type entier ou enum vers un pointeur
- Un pointeur de fonction vers un pointeur sur une fonction de type diff�rent
- Un pointeur sur un objet vers un pointeur sur un objet de type diff�rent
ok, mais ca ne repond pas a ma question, car il me semble que c est realisable avec le cast C standard !?
-
Ce qu'il faut savoir, c'est que dans tous les cas (sauf peut-�tre pointeur de fonction <--> void*, et dynamic_cast qui n'est pas un cast ordinaire), tout est r�alisable avec le cast C. Et c'est justement la raison pour laquelle il ne faut l'utiliser sous aucun pr�texte.
Donc, il faut utiliser le cast le plus restrictif possible selon la situation: static_cast<>, reinterpret_cast<>, const_cast<>.
-
ok, cool, je vais faire evoluer mon code vers des cast c++.
Mais y a t il une methode de recherche pour les trouver (syntaxiquement bien sur). Car avec les milliers de lignes de code ca va etre chaud. En tout cas je ne vois pas de moyens simple de les trouver...
-
En effet, il n'y en a pas (� part peut-�tre jouer avec la grammaire du compilateur), alors que les casts C++ sont tous ais�ment d�tectables. Raison de plus pour y penser d�s l'�criture du code...
-
J'ai vu des casts souvent utilis�s alors qu'en fait aucun cast n'�tait n�cessaire.
Il faut laisser faire les conversions implicites si possible.
Ensuite si tu veux downcaster un objet polymorphe ou convertir un pointeur void vers un autre type de pointeur, utilise static_cast<>.
Si tu veux downcaster un objet polymorphe et faire une v�rification � l'�xecution qu'il s'agit bien du bon type, utilise dynamic_cast<>.
Si tu veux convertir un pointeur vers un autre type de pointeur incompatible, utilise reinterpret_cast<>.
Si tu veux enlever le const dans un pointeur, utilise const_cast<>.