Najprościej rzecz ujmując jest to typ wyliczeniowy.
Wyobraźmy sobie taką sytuacje tworzysz funkcję która sprawdza czy dana liczba jest parzysta. Można ją wykonać tak:
bool czy_parzysta(int n)
{
if(n%2==0)return 1;
return 0;
}
Jest to jak najbardziej poprawne jednak co wtedy jeśli byś miał nie 2 możliwości ale np 3. Owszem mógłbyś zwracać int. Jednak nie było by to tak eleganckie. Lepiej jest stworzyć sobie typ wyliczeniowy, stałą symboliczną. Co z tego że pod tą stałą jest jakaś liczba. Jest ale nas to nie obchodzi. Nas jako programistów obchodzi kod, a w szczególności to by był łatwy do zrozumienia.
Zobacz na ten kod:
enum liczba{parzysta=1,nieparzysta=0};
liczba czy_parzysta(int n)
{
if(n%2==0)return parzysta;
return nieparzysta;
}
Tak naprawdę dalej zwracamy liczbę 1 jak jest parzysta, w przeciwnym wypadku 0. Jednak taki kod jest lepszy do zrozumienia. Łatwiej się go czyta.