IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Question sur les casts


Sujet :

C++

  1. #1
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut Question sur les casts
    Bonjour tlm,

    J'aurai simplement voulu savoir la différence entre ces deux instructions et laquelle est à préférer (en terme de clarté du code ou de rapidité) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int A = 10;
     
    // Première instruction avec un static_cast
    float B = static_cast<float>(A);
     
    // Seconde instruction avec un cast traditionnel
    float C = float(A);
    Merci d'avance pour vos réponses


    Nico.
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  2. #2
    Membre éprouvé

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Points : 1 205
    Points
    1 205
    Par défaut Q
    Emploie tant que tu le peux les nouveaux opérateurs de cast du C++, à commencer par static_cast<> (qui va très bien ici). Cela t'éviteras des soucis de maintenance, car certains autres casts ne font plus aucun test à la compilation et le résultat peut faire planter méchamment ton programme. Ici avec des types de base aucun soucis.

    Plus d'infos sur les casts dans la FAQ : http://c.developpez.com/faq/cpp/?page=conversions
    Fiquet
    - FAQ SDL
    - FAQ C++

  3. #3
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Merci merci j'utiliserai `static_cast` dorénavant
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ou si tu veux faire, ô infamie (ou défi), un code qui compile pour C et C++, tu peux t'amuser un peu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #ifdef __cplusplus
    #define STATIC_CAST(type,val) static_cast<type>(val)
    #define VOIDETOILE_CAST(type, ptrvoid) static_cast<type>(ptrvoid)
    // + reinterpret_cast, const_cast, etc.
    #else
    #define STATIC_CAST(type,val) ((type)(val))
    #define VOIDETOILE_CAST(type, ptrvoid) (ptrvoid)
    /* + reinterpret_cast, const_cast, etc. */
    #endif
     
     
    /* ...  */
    int A = 10;
     
    /*  Première instruction avec un static_cast */
    float B = STATIC_CAST(float, A); 
     
    int *ptrC = VOIDETOILE_CAST( int *, malloc(sizeof(*ptrC)) );

    Ça c'est du C/C++ !
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. petite question sur les gpointers et les cast
    Par echantillon dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 30/05/2011, 13h23
  2. question sur les vertex buffer et index buffer
    Par airseb dans le forum DirectX
    Réponses: 9
    Dernier message: 25/08/2003, 02h38
  3. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  4. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo