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 :

A quoi sert union ? [FAQ]


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Par défaut A quoi sert union ?
    C'est une question qui peut paraitre bête ou simple, mais je ne vois pas dans quel cas il peut-être intéressant d'utiliser une union...

    Merci d'avance,

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Finalement à pas grand'chose, car l'union est assez peu compatible avec le reste du système de type du C++ (boost::any y est beaucoup plus), et assez peu sûre à manipuler sans un minimum de rigueur.

    L'idée est d'optimiser l'espace mémoire quand, selon un discriminant défini en dehors de l'union, une valeur peut être d'un type ou un autre. Dans tout le code que j'ai pu écrire, je ne crois pas en avoir crée une seule.

    Certains (dont l'API Win32) utilisent une union pour faire des casts, mais cette utilisation n'a rien de portable, et n'est pas garantie en C++.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,
    Citation Envoyé par JolyLoic
    et assez peu sûre à manipuler sans un minimum de rigueur.
    C'est le cas pour tout programme : la rigueur est ... de rigueur. Sinon, autant aller planter des choux.

  4. #4
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Citation Envoyé par JolyLoic
    Finalement à pas grand'chose, car l'union est assez peu compatible avec le reste du système de type du C++ (boost::any y est beaucoup plus), et assez peu sûre à manipuler sans un minimum de rigueur.

    L'idée est d'optimiser l'espace mémoire quand, selon un discriminant défini en dehors de l'union, une valeur peut être d'un type ou un autre. Dans tout le code que j'ai pu écrire, je ne crois pas en avoir crée une seule.

    Certains (dont l'API Win32) utilisent une union pour faire des casts, mais cette utilisation n'a rien de portable, et n'est pas garantie en C++.
    Il y a aussi boost::variant, qui est vraiment pas mal pour faire des types somme et types récursifs comme dans les langages comme OCaml.

    En quelques lignes tu te fabriques ton arbre binaire, quadtree...

    C'était plus facile à manipuler qu'une relation d'héritage explicite, quand tu veux rajouter des fonctions de manipulation.
    Pas besoin de modifier le code des classes.

    Ce qui est bien c'est que la vérification des types se fait à la compilation, puis plein d'autres avantages, tu es sûr de n'avoir que les types spécifiés lors de la définition.

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Bonjour,

    Mindiell écrit :
    C'est une question qui peut paraitre bête ou simple, mais je ne vois pas dans quel cas il peut-être intéressant d'utiliser une union...
    Imbriquée dans une classe, l' union peut remplacer des constantes. L' union ne fait pas l' oignon, dans la mesure où ses valeurs de retour sont générallement des entiers, signés sur 16 ou 32 bits ...

    salut.

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Tu es sur de ne pas avoir lu enum au lieu d'union ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    union permet de créer un POD avec l'alignement et la taille maximale pour contenir n'importe laquelle de ses possibilitées, toutes des PODs.
    Chacune des possibilités consiste en un type et une variable. Ensuite, l'utilisation de cette variable avec l'opérateur. sert à indiquer quel type on manipule.
    C'est à toi de te débrouiller pour savoir quel est le type de ce que contient ton union.

    Exemple,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    union
    {
        int i,
        double d
    } u;
    peut contenir soit un int soit un double.
    Ensuite avec u.i = 3 je mets un entier dedans.
    avec u.d = 3.14 j'écrase cet entier et je mets un double.

    En C++ c'est relativement peu intéressant vu qu'on travaille pas qu'avec des PODs.
    On a alors des mécanismes similaires, comme boost.variant.

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Bonjour,

    Merde je me suis trompé entre union et énumération.
    Selon le Pascal l' union n' est rien d' autre qu' une structure au sein de la structure.

    Mais le C et le C++ ( comme d' autres langages ) enveloppent ce concept de manière assez aisée.

    salut.

Discussions similaires

  1. A quoi sert XML-Schema
    Par Community Management dans le forum Valider
    Réponses: 20
    Dernier message: 26/01/2009, 09h52
  2. à quoi sert le délestage?
    Par r0d dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 5
    Dernier message: 06/10/2004, 14h34
  3. a quoi sert le schema dans postgres ??
    Par champion dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 13/09/2004, 10h25
  4. [info] A quoi sert ImageObserver ?
    Par FrigoAcide dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 22/03/2004, 17h20

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