Почему перечисления считаются составными типами? - PullRequest
13 голосов
/ 27 мая 2010

Массивы, функции, указатели, ссылки, классы, объединения, перечисления и указатели на члены являются составными типами .

Мое понимание составного типа заключается в том, что оно основано на других типах. Например, T[n], T* и T& все основаны на T. Тогда какой другой тип (типы) является перечислением на основе?

Или, если мое понимание составных типов неверно, что именно в типе делает его составным? Является ли составной просто синонимом для пользовательского ?

1 Ответ

13 голосов
/ 27 мая 2010

В C ++ перечислимые типы являются скалярными типами, но в то же время они являются составными типами, поскольку они построены поверх некоторого фундаментального интегрального типа. В случае массива или указателя вы явно указываете «базовый» тип, но в случае перечисления конкретный базовый интегральный тип выбирается неявно и автоматически реализацией. У вас нет ручного контроля над базовым целочисленным типом, который по-прежнему не лишает типы enum составного характера.

Некоторые компиляторы (а также будущий стандарт C ++ C ++ 0x) позволяют пользователю указывать базовый целочисленный тип для данного типа перечисления, что делает более очевидным, что это на самом деле составной тип. См. здесь для примеров, таких как

enum class Color : char { red, blue };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...