Enum
Tipi, deklarirani z besedo enum
so posebni tipi, ki
predstavljajo naštevanje (enumeration) neke končne skupne možnosti.
Običajne enum
-e se definira preprosto tako, da naštejemo vse možnosti:
enum Color { RED, YELLOW, GREEN };
Sedaj lahko tip Color
uporabljamo kot običajen tip, le da ima lahko le tri
vrednosti:
Color c = RED;
if (c == GREEN) {
...
}
Zelo pogosto se enum
-e uporablja v povezavi s switch
stavkom:
switch (c) {
case RED: ...; break;
case YELLOW: ...; break;
case YELLOW: ...; break;
}
Tu se lahko za vsako izmed končno mnogo možnosti odločimo, kaj bomo naredili, prevajalnik pa nas posvari, če smo katero pozabili.
S C++11 so prišli tudi t. i. scoped enumerations, ki se jih definira podobno,
s kombinacijo enum class
:
enum class Color { RED, YELLOW, GREEN };
razlika pa je, da moramo pri uporabi njihovih vrednostih pisati tip, ki mu vrednosti pripadajo (zato scoped)
Color c = Color::RED;
Prav tako lahko določimo kateri tip se v ozadju uporabi za vrednosti. Pri stari
verziji je to vedno int
(in možnosti se začnejo šteti od 0 naprej, če ne
povemo drugače),
pri novejšh, pa lahko izberemo drug tip, kot npr. char
:
enum class Color : char { RED, YELLOW, GREEN };
Še ena razlika je, da se novejši enumi se ne morejo avtomatsko pretvoriti v svoj implementacijski tip, starejši pa se lahko.
int c = RED; // ok
char b = Color::RED; // error: cannot convert ‘Color’ to ‘char’ in initialization