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,
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,
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.
Bonjour,
C'est le cas pour tout programme : la rigueur est ... de rigueur. Sinon, autant aller planter des choux.Envoyé par JolyLoic
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.Envoyé par JolyLoic
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.
Bonjour,
Mindiell écrit :
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 ...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...
salut.
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.
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,
peut contenir soit un int soit un double.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 union { int i, double d } u;
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.
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.
Partager