Enums
Version C
En C, il était possible de créer des constantes symboliques à la chaîne en utilisant des enum :
enum tata {
RIRI,
FIFI,
LOULOU,
};
Les constantes symboliques crées ont des valeur numérique qui s’incrémentent au fur et a mesure.
Ici :
RIRIvaut 0FIFIvaut 1LOULOUvaut 2
Ces énumérations existent en C++ mais leur inconvénient c’est que les constantes qu’elles définissent appartiennent à l’étendue globale. Cela signifie que deux enums ne peuvent pas partager un même nom de symbole.
enum tata {
RIRI,
FIFI,
LOULOU,
};
enum toto {
LOULOU,
TOTO,
TATA
};
$ g++ main.cpp -Wall -Wextra
main.cpp:8:5: error: ‘LOULOU’ conflicts with a previous declaration
8 | LOULOU,
| ^~~~~~
main.cpp:4:5: note: previous declaration ‘tata LOULOU’
4 | LOULOU,
| ^~~~~~
Version C++
En C++ il est possible de déclarer des enum class qui sont des énumérations dont les constantes existent dans une étendue propre.
enum class Tata {
RIRI,
FIFI,
LOULOU,
};
enum class Toto {
LOULOU,
TOTO,
TATA
};
On ne peut pas accéder aux constantes symboliques d’une enum class juste en écrivant leur nom. Il faut les préfixer sur nom de l’énumération et de ::.
int main(void)
{
Tata tata_val{Tata::LOULOU};
Toto toto_val{Toto::LOULOU};
std::cout << static_cast<int>(tata_val) << std::endl;
std::cout << static_cast<int>(toto_val) << std::endl;
}
Sortie :
2
0
On constate bien que les deux enums coexistent avec une constante qui s’appelle pareil mais qui ne vaux pas la même chose.