enum
- тип, определяемый пользователем. В целом нет большой разницы между enum
в C и C ++. За исключением областей видимости в C ++: если некоторые enum
объявлены внутри функции или класса, к нему нельзя получить доступ за пределами объявленной функции / класса. Это не относится к C.
Нет разницы в декларации. Например, можно объявить новый enum
следующим образом (как для C, так и для C ++):
enum newEnum { zero = 0, one, two, three };
В определении новых переменных почти нет разницы. Для определения новой переменной с новым определенным типом можно использовать следующую строку:
enum newEnum varA = zero; // though allowed to skip enum keyword in C++
Но есть один интересный момент. В C ++ нельзя добавить два значения enum
и присвоить результат переменной типа enum
:
varA = one + zero; // won't compile in c++
Это объяснимо: значения enum
могут быть преобразованы в значения int
, но не наоборот (от int
до enum
). Таким образом, в последнем примере компилятор не может присвоить результат суммы (с типом int
) переменной varA (enum
newEnum), потому что он не может скрыть int
в newEnum.
Однако это возможно in C: последняя строка кода успешно компилируется. Это меня смущает. Поэтому возникает вопрос: как компилятор C обрабатывает enum
? Это даже не кастомный тип для него? Это просто int
?