Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Ben quoi, un enum, c'est un type int. Il est sûrement sur une machine 32 bit, mais rien n'interdit un int d'être un int8_t. Donc théoriquement, on devrait éviter les enum qui ne tienne pas dans des char non ?
The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
--Wilhelm Stekel
Le type sous-jacent d'un enum est à la discrétion du compilateur. Il doit cependant en choisir un qui puisse contenir toutes les valeurs définies et au max un int ... sauf si le int n'est pas suffisant.
En fait, sur GCC ou Visual, les enums sont souvent directement mappé sur des int.
Notes qu'avec C++0x, tu pourras spécifier le type souhaité :
ce qui ne veut pas dire que le typage sera relâché :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 enum answer : bool {yes, no}; // occupe la même place qu'un bool enum struct relation : unsigned char {less, equal, greater}; // occupe la même place qu'un unsigned char enum class level : int {low, medium, high}; // occupe la même place qu'un int
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 unsigned char uc(0); relation r = uc; // erreur level le(level::low); int i = le;// erreur
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Héhé, alors cela diffère du C :
Portant, je pense que j'aurais du mal a me défaire de cette habitude :'( !Envoyé par ISO/IECC 9899 TC3 Committee Draft 2007-09-07, §6.7.2.2
Note :PS : Il y a moyen de remplacer "Envoyé par" par autre chose ?Envoyé par ISO/IECC N3000 2009-11-09, §7.2
The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
--Wilhelm Stekel
C'est un peu plus subtil : 'scoped enumeration' désigne les nouvelles classes d'énumération (enum struct ou enum class) :
Pour les anciennes énumération (enum tout court), c'est la même définition que pour C++03 :The enumeration type declared with an enum-key of only enum is an unscoped enumeration, and its enumerators are unscoped enumerators. The enum-keys enum class and enum struct are semantically equivalent; an enumeration type declared with one of these is a scoped enumeration, and its enumerators are scoped enumerators.
For an enumeration whose underlying type is not fixed, the underlying type is an integral type that can
represent all the enumerator values defined in the enumeration. If no integral type can represent all the
enumerator values, the enumeration is ill-formed. It is implementation-defined which integral type is used
as the underlying type except that the underlying type shall not be larger than int unless the value of an
enumerator cannot fit in an int or unsigned int. If the enumerator-list is empty, the underlying type is
as if the enumeration had a single enumerator with value 0.
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Ok, en gros, en C, enum = int;
en C++, enum = ce-que-le-compileur-décide mais max int;
enum [struct/class] = ce-qu'on-veux.
Question, quel est l'intérêt des scoped enum ?
The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
--Wilhelm Stekel
Bonne question : N237.
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Merci bien !
The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
--Wilhelm Stekel
Juste un petit aparté sur les énumérations en C, qui semble t'avoir induit en erreur:
Si la plage minimale garantie pour un int (-32767 à 32767).
En outre :
Donc, en C, tu peux avoir 1023 valeurs dans ton énumérations sans soucis.5.2.4.1 Translation limits
— 1023 enumeration constants in a single enumeration
Oui, mais leur valeur doivent être compris dans un int. Donc même si cela sont des int8, tu peux faire 1023 enumeration, mais avec seulement 256 valeurs...
The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
--Wilhelm Stekel
The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
--Wilhelm Stekel
Salut,
Les plages que doivent représentées les types numériques sont fixées par la norme C (99) et sont les mêmes pour C++. Et un int doit être au minimum 16bits. Est-ce que ça toujours été comme ça ? J'en sais rien. Le plus vieux proc. que j'ai tâté est le 8086 qui était déjà 16 bits.
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager