Les Enums en C++
Qu'est-ce qu'un Enum ?
En C++, un énumérateur (ou enum
) est un type défini par l'utilisateur permettant de regrouper un ensemble de valeurs spécifiques pour une variable. Cela signifie que la variable ne peut prendre qu'une valeur parmi un ensemble restreint de valeurs possibles.
Syntaxe des Enums
Pour définir un énumérateur, on utilise le mot-clé enum
suivi du nom de l'énumérateur et de la liste des valeurs possibles entre accolades. Voici un exemple simple :
enum Day {sun, mon, tue, wed, thu, fri, sat};
Dans cet énumérateur, les valeurs associées à chaque jour sont les suivantes : - sun
aurait la valeur de 0 - mon
aurait la valeur de 1 - tue
aurait la valeur de 2 - wed
aurait la valeur de 3 - thu
aurait la valeur de 4 - fri
aurait la valeur de 5 - sat
aurait la valeur de 6
Dans un autre exemple, nous pouvons définir un énumérateur avec des valeurs attribuées explicitement :
enum Grade {freshman=9, sophomore, junior, senior};
Ici, l'énumérateur freshman
reçoit directement la valeur 9, et les autres énumérateurs reçoivent automatiquement des valeurs croissantes.
Enums Scoped
Les enums scoped, introduits dans C++11, présentent des différences par rapport aux enums non scoped : - Les constantes sont encapsulées dans leur propre espace de noms. - Ils sont fortement typés, ce qui empêche les conflits de noms avec d'autres énumérateurs.
Voici un exemple de leur utilisation :
enum class WeekDay {sun, mon, tue, wed, thu, fri, sat};
WeekDay day = WeekDay::sun; // 'sun' est précédé de 'WeekDay::'
int friday = static_cast(WeekDay::fri); // Doit caster pour obtenir un int
Dans cet exemple, l'énumération évite tout conflit :
enum class LogResult {Success, InvalidFileName, WriteError};
enum class SocketResult {Success, InvalidAddrError, TimeoutError};
LogResult logger_result = LogResult::Success;
if (logger_result == LogResult::Success) {}
Ici, Success
appartient à l'espace de noms LogResult
, évitant ainsi un conflit avec SocketResult::Success
.