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 :

quel est la difference ?


Sujet :

C++

  1. #1
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut quel est la difference ?
    Bonjour,

    quel est la difference entre
    type a = (type) b
    et
    type a = type(b)

    ou a et b sont de type different de la famille int, char, float, double, unsigned int ...

    ?????

    suivant les types de a et b, type a = (type) b met une valeur fausse dans a !!!!
    je pensez que c'etait la même chose

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    (type)b est un transtypage de type C de b en type. A bannir en C++ :
    http://c.developpez.com/faq/cpp/?pag...s#DIVERS_casts

    type(b) est la construction d'un objet temporaire type à partir de b. Cela a donc le même effet dans certains cas, mais pas tous.

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    ok merci.
    Du coup quel est la meilleur façon?
    faut obligatoirement utilisé des static/dynamic cast pour les types primitifs??

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Du coup quel est la meilleur façon?
    faut obligatoirement utilisé des static/dynamic cast pour les types primitifs??
    Pas que pour les types primitifs. Il est fortement conseillé d'utiliser les opérateurs de cast C++ pour n'importe quel transtypage.

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    du coup pour tout les opérations avec de type différent, il faut les casté?


    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int a = 10;
    unsigned char b = 255;
    float c = static_cast<float>(b)/static_cast<float>(a)

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Oui. Enfin dans ce cas là il suffit qu'une opérande soit de type float, pas la peine de convertir les deux.

    Et dans les cas oû la conversion est sûre (aucun risque de perte d'information), la conversion pourra se faire implicitement sans avertissement du compilo.

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    si j'ai bien compris (c'est juste un exemple ),
    si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float a = 10.0021549884;
    unsigned char b = (unsigned char) a;
    b va s'initialiser avec les bits de poids faible de a. Ce qui peut produire des erreurs

    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float a = 10.0021549884;
    unsigned char b = unsigned char (a);
    on convertie a en unsigned char que l'on affecte a b

    les cast se situeny ou? ils font une vrai conversion?

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    1/ Dans le premier cas, la perte d'information est simplement dûe à l'arrondi. Si tu n'avais pas converti explicitement le compilo t'aurait donné un avertissement.

    2/ Dans le second cas, on construit un unsigned char à partir de a (c'est comme si tu appelais le constructeur de n'importe quelle classe), puis on l'affecte à b. Donc au final on a bien converti a en unsigned char.

    En bon C++ il faudrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float a = 10.0021549884;
    unsigned char b = static_cast<unsigned char>(a);

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    ok merci.
    juste une dernier question,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float a =10.5644536
    unsigned int b = (unsigned int) a
    va initialisé b a 10

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float a = -10.5644536
    unsigned int b = (unsigned int) a
    va mettre n'importe quoi dans b

    es qu'il y as d'autre type d'erreur possible avec cette écriture ?

    ps : je sais que c'est pas super, mais quand y en as plein le code C/C++ sa peut servir a comprend un bug

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    va mettre n'importe quoi dans b
    Il me semble que le résultat est bien défini : lorsqu'il y a dépassement de capacité il y a bouclage des valeurs (ici ton nombre vaudra UINT_MAX - 10).

  11. #11
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    je m'apperçois en faite que j'ai cracké..
    j'ai du faire un truc débile dans mon code, genre diviser deux entier. (ce qui expliquerai que je n'avais la valeur que j'attendais)
    Je n'arrive pas à retrouver le bugs que j'ai eu...


    merci pour les réponses. Au moins j'aurais appris un peu plus des subtilité du c++.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. quel est la difference entre merise et uml
    Par mghari11 dans le forum Modélisation
    Réponses: 1
    Dernier message: 07/05/2011, 19h41
  2. Quel est La difference Entre Module Standard Et Module Classe
    Par r.mehdi dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 04/06/2008, 12h39
  3. Quel est la difference?
    Par yan dans le forum C++
    Réponses: 17
    Dernier message: 16/01/2008, 09h58
  4. Jboss et Jboss Seam quel est la difference ?
    Par ambhcie dans le forum Seam
    Réponses: 6
    Dernier message: 02/08/2007, 12h36
  5. Quel est la différence entre SUSE et mandrake
    Par pierrot10 dans le forum Distributions
    Réponses: 9
    Dernier message: 04/06/2006, 19h01

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