Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
870 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Types de cast en C++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Types de cast en C++

n°1394258
slash33
Posté le 24-06-2006 à 18:58:44  profilanswer
 

Quelqu'un peut-il se dévouer pour expliquer les différences entre :
static_cast
dynamic_cast
reinterpret_cast et
const_cast
 
?
 
 :hello:

mood
Publicité
Posté le 24-06-2006 à 18:58:44  profilanswer
 

n°1394261
masklinn
í dag viðrar vel til loftárása
Posté le 24-06-2006 à 19:19:16  profilanswer
 

Google Knows [:dawa]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1394282
_darkalt3_
Proctopathe
Posté le 24-06-2006 à 20:28:58  profilanswer
 

Use the force, read the doc, slash33

n°1394292
++fab
victime du syndrome IH
Posté le 24-06-2006 à 21:06:12  profilanswer
 

Quelle doc ? Google knows what ?
Les réponses dans cette cat sont de plus en plus intéressantes à lire.
 
/33> consultes http://www.gotw.ca/gotw/017.htm  
C'est un sujet vaste, et pas inintéressant. J'avoue que je n'ai pas le courage ni le temps pour me lancer dans un exposé -- qui serait à coup sur inexact. Si tu as des questions plus précises, ça doit être jouable d'y répondre, ou au moins d'en discuter, autrement qu'à coup d'RTFM.
 
Tu peux aussi rajouter C-cast dans ta liste.

Message cité 2 fois
Message édité par ++fab le 24-06-2006 à 21:06:53
n°1394295
_darkalt3_
Proctopathe
Posté le 24-06-2006 à 21:20:47  profilanswer
 

http://www.google.fr/search?hs=wsX [...] DcountryFR
 
premier lien [:spamafote]
 
Et n'importe quel bouquin valable de c++ en cause ...


---------------
Töp of the plöp
n°1394296
skelter
Posté le 24-06-2006 à 21:22:32  profilanswer
 

++fab a écrit :


Tu peux aussi rajouter C-cast dans ta liste.


 
oui, en tenant compte que c'est déprécié.

n°1394297
masklinn
í dag viðrar vel til loftárása
Posté le 24-06-2006 à 21:23:45  profilanswer
 

++fab a écrit :

Quelle doc ? Google knows what ?


Il demande une explication des 4 casts C++ et des différences entre eux, il suffit de googler "C++ cast" pour avoir touzemille pages de résultat sur le sujet [:pingouino]

_darkalt3_ a écrit :

http://www.google.fr/search?hs=wsX [...] DcountryFR
 
premier lien [:spamafote]
 
Et n'importe quel bouquin valable de c++ en cause ...


http://www.google.fr/search?q=C%2B%2B+cast
 
toute la page, et les suivantes [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1394299
_darkalt3_
Proctopathe
Posté le 24-06-2006 à 21:25:52  profilanswer
 

Ben oui, c'est quand même un minimum quand on étudie le c++ ...
 
++fab: Je ne pense pas qu'on puisse apprendre un langage sans s'auto-documenter sur les mécanisme de base [:spamafote]


---------------
Töp of the plöp
n°1394301
slash33
Posté le 24-06-2006 à 21:52:57  profilanswer
 

Bon je vais être plus explicite:
 
Sous VS 6.0, en MFC pourquoi
 

Code :
  1. CMainFrame* pFrame = dynamic_cast<CMainFrame*>(AfxGetMainWnd());


 
produit des warnings à la compilation?

Code :
  1. warning C4541: 'dynamic_cast' used on polymorphic type 'class CWnd' with /GR-; unpredictable behavior may result

n°1394303
skelter
Posté le 24-06-2006 à 21:55:48  profilanswer
 

sans doute parce que l'option /GR- desactive le support du rtti, il faut l'enlever, mais regarde quand meme la doc du compilateur pour etre sur

mood
Publicité
Posté le 24-06-2006 à 21:55:48  profilanswer
 

n°1394329
slash33
Posté le 25-06-2006 à 00:02:42  profilanswer
 

ok

n°1394382
++fab
victime du syndrome IH
Posté le 25-06-2006 à 12:12:08  profilanswer
 

skelter a écrit :

oui, en tenant compte que c'est déprécié.


Je dirais plutôt déconseillé. Non déprécié au nom de la compatibilité C.
Mais dans la vraie vie, c'est le cast que je croise le plus souvent. Donc connaitre la différence entre chaque nouveau cast et le C-cast me parait important.

n°1394384
++fab
victime du syndrome IH
Posté le 25-06-2006 à 12:14:44  profilanswer
 

masklinn a écrit :

Il demande une explication des 4 casts C++ et des différences entre eux, il suffit de googler "C++ cast" pour avoir touzemille pages de résultat sur le sujet [:pingouino]
 
http://www.google.fr/search?q=C%2B%2B+cast
 
toute la page, et les suivantes [:pingouino]


 
Ce qui demande d'être capable de faire le tri entre les bonnes pages et les mauvaises. Chose que tu n'es pas capable de faire lorsque tu es débutant, et pas seulement.

n°1394388
++fab
victime du syndrome IH
Posté le 25-06-2006 à 12:23:35  profilanswer
 

_darkalt3_ a écrit :

Ben oui, c'est quand même un minimum quand on étudie le c++ ...


?
 

_darkalt3_ a écrit :

++fab: Je ne pense pas qu'on puisse apprendre un langage sans s'auto-documenter sur les mécanisme de base [:spamafote]


Je me demande juste si c'est la peine de moraliser toute personne qui veut avoir des informations sur les mécanismes de bases comme tu dis.

n°1394452
slash33
Posté le 25-06-2006 à 15:20:45  profilanswer
 

Mécanismes de base, je ne sais pas. Par contre il est certain que les cast C++ ne sont pas utilisés en MFC qui pourtant est un hybride C/C++. Vu la quantité de code qui m'est passé sous la main depuis plusieurs années, est-ce si important que ça lorsqu'on combine les cast avec la programmation défensive (contrôle post transtypage) ?

Message cité 1 fois
Message édité par slash33 le 25-06-2006 à 15:23:31
n°1394454
skelter
Posté le 25-06-2006 à 15:28:52  profilanswer
 

++fab a écrit :

Je dirais plutôt déconseillé.


 
oui, je croyais que ca l'était mais en fait non
 

++fab a écrit :

Non déprécié au nom de la compatibilité C.


 
il y a quand meme points qui permettent la compatibilité avec le C et qui sont dépréciés

n°1394456
Giz
Posté le 25-06-2006 à 15:32:24  profilanswer
 

test profil


Message édité par Giz le 25-06-2006 à 15:32:51

---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1394464
++fab
victime du syndrome IH
Posté le 25-06-2006 à 15:51:51  profilanswer
 

skelter a écrit :

il y a quand meme points qui permettent la compatibilité avec le C et qui sont dépréciés


comme ?

n°1394469
++fab
victime du syndrome IH
Posté le 25-06-2006 à 15:54:55  profilanswer
 

slash33 a écrit :

est-ce si important que ça lorsqu'on combine les cast avec la programmation défensive (contrôle post transtypage) ?


Peux-tu en montrer un exemple ?

n°1394471
skelter
Posté le 25-06-2006 à 15:57:43  profilanswer
 


 
ben static en porté global pour rendre local a la TU une fonction ou un objet, et 'char * p = "machin";'
 
annexe D, D.2 et D.4

Message cité 2 fois
Message édité par skelter le 25-06-2006 à 15:59:00
n°1394480
++fab
victime du syndrome IH
Posté le 25-06-2006 à 16:25:41  profilanswer
 

skelter a écrit :

ben static en porté global pour rendre local a la TU une fonction ou un objet'


à une fonction ? Ce n'est pas ce que je lis ...
 

Citation :

et 'char * p = "machin";'


Yep

n°1394490
skelter
Posté le 25-06-2006 à 16:40:58  profilanswer
 

oui ca ne concerne pas les fonctions

n°1394493
slash33
Posté le 25-06-2006 à 16:48:59  profilanswer
 

++fab a écrit :

Peux-tu en montrer un exemple ?


Code :
  1. CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
  2. ASSERT_KINDOF(CMainFrame, pFrame);


 
D'accord le code défensif n'avertit du problème qu'en version debug.

n°1394494
slash33
Posté le 25-06-2006 à 16:51:10  profilanswer
 

skelter a écrit :

annexe D, D.2 et D.4


Annexes de quelle référence SVP ? :)

n°1394502
++fab
victime du syndrome IH
Posté le 25-06-2006 à 17:04:19  profilanswer
 

slash33 a écrit :

Annexes de quelle référence SVP ? :)


Le standard.

n°1394503
++fab
victime du syndrome IH
Posté le 25-06-2006 à 17:06:36  profilanswer
 

slash33 a écrit :

Code :
  1. CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
  2. ASSERT_KINDOF(CMainFrame, pFrame);


 
D'accord le code défensif n'avertit du problème qu'en version debug.


Je ne connais pas la sémantique d'ASSERT_KINDOF, je ne peux donc pas commenter.

n°1394505
slash33
Posté le 25-06-2006 à 17:11:31  profilanswer
 

Hum. J'ai bien cherché là mais je n'ai pas trouvé:
http://www.open-std.org/JTC1/SC22/WG21/

n°1394506
slash33
Posté le 25-06-2006 à 17:14:35  profilanswer
 

++fab a écrit :

Je ne connais pas la sémantique d'ASSERT_KINDOF, je ne peux donc pas commenter.


Ben voici sa définition mais je ne suis pas sûr que ça t'aide  :o  

Code :
  1. #define ASSERT_KINDOF(class_name, object) \
  2. ASSERT((object)->IsKindOf(RUNTIME_CLASS(class_name)))

n°1394511
skelter
Posté le 25-06-2006 à 17:21:19  profilanswer
 

en gros c'est equivalent a

Code :
  1. CMainFrame* pFrame = dynamic_cast<CMainFrame*>(AfxGetMainWnd());
  2. assert(pFrame);

n°1394519
slash33
Posté le 25-06-2006 à 17:34:43  profilanswer
 

Quand le flag _DEBUG est positionné oui. Mais l'nstruction contrôle aussi le type de l'objet (et son héritage).
 
Un truc hérité de CObject en fait.


Message édité par slash33 le 25-06-2006 à 17:36:06
n°1394533
++fab
victime du syndrome IH
Posté le 25-06-2006 à 18:04:16  profilanswer
 

Je vois 2 problèmes avec le C-cast dans l'exemple MFC :
- la cv-qualification est ignoré.
- en cas d'héritage virtuel, AMHA le C-cast posera problème. un code MFC est-il compilable avec un autre compilateur que VC++ ?

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Types de cast en C++

 

Sujets relatifs
Probleme de conversion de typesCast en VBS
Service Web avec Axis et types complexes.Conversion de types en C
[Débutant]générer un tableau contenant des valeurs de différents typesarticle sur les types en Python + question
arraylist transtypage cast object string int (help please)[C++/résolu] operator [][] () et types variants
[VS 2003] [Qt] Callback, objet, cast.[C++] Les différents types de pointeurs sur fonction ?
Plus de sujets relatifs à : Types de cast en C++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR