Включение класса enum в C ++ 0x - PullRequest
13 голосов
/ 13 июня 2011

Позволят ли новые объявления "перечислимого класса" в C ++ 0x разрешать включение новых перечислений?

Я спрашиваю, что говорит стандарт, а не о поддержке компилятора.

Ответы [ 2 ]

17 голосов
/ 13 июня 2011

Из чертежа n3242:

6.4.2 Оператор switch [stmt.switch]

[...]

2 Условие должно быть целого типа, типа перечисления или типа класса, для которого одно неявное существует функция преобразования в целочисленный или перечислимый тип (12.3).

7.2 Объявления перечисления [dcl.enum]

[...]

enum-key:
    enum
    enum class
    enum struct

Это означает, что да.

7 голосов
/ 13 июня 2011

Да, перечисления и перечислители с ограничением (enum {class, struct}) будут вести себя точно так же, как и перечисления с незаданной областью (enum, old style) в контексте оператора switch.

n3242 - 6.4.2.2[stmt.switch]:

Условие должно иметь целочисленный тип, тип перечисления или тип класса, для которого существует одна неявная функция преобразования в целочисленный тип или тип перечисления (12.3).Если условие относится к типу класса, условие преобразуется путем вызова этой функции преобразования, и результат преобразования используется вместо исходного условия для оставшейся части этого раздела.Интегральные акции выполняются.Любой оператор в операторе switch может быть помечен одной или несколькими метками регистра следующим образом:

case constant-expression :

, где константное выражение должно быть интегральным константным выражением (5.19).Целочисленное константное выражение неявно преобразуется в повышенный тип условия переключения.Никакие две константы регистра в одном и том же переключателе не должны иметь одинаковое значение после преобразования в продвинутый тип условия переключения.

В случае условия указан тип перечисления.Это включает в себя как enoped, так и unosoped перечисления (см. N3242 - 7.2).

Что касается меток case, они должны быть целочисленными константными выражениями.Который является константным выражением целочисленного типа или типа перечисления (см. N3242 - 5.19.3).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...