#c #class #enums #c 11
#c #класс #перечисления #c 11
Вопрос:
class A {
public: enum class { HELLO, WORLD };
};
Зная, что внутри class
объявление простого enum
(а не enum class
) является лучшей идеей, потому что оно уже введено с class
идентификатором. Но все же приведенное выше утверждение является действительной C 0x
подписью. Теперь как получить доступ к безымянному enum class
внешнему?
int i = A::HELLO; // error: ‘HELLO’ is not a member of ‘A’
Комментарии:
1. он просто не компилируется прямо из неназванного класса перечисления : D
Ответ №1:
На самом деле, это недопустимо. В C 0x FDIS указано (9.2p1)
За исключением случаев, когда используется для объявления друзей (11.3) или для введения имени члена базового класса в производный класс (7.3.3), объявления членов объявляют членов класса, и каждое такое объявление члена должно объявлять по крайней мере одно имя члена класса.
В вашем случае имя перечислителя не вводится в область видимости класса, и имя перечисления также не вводится. Таким образом, это объявление члена вообще не вводит имени члена.
РЕДАКТИРОВАТЬ: И на самом деле, существует более прямой запрет на объявление перечисления. 7.2p2:
Необязательный идентификатор не должен быть опущен при объявлении перечисления с ограниченной областью.
Комментарии:
1. это означает, что мы не можем инициализировать его объект в конструкторе. Таким образом, такой
enum
будет полностью отключен от внешнего мира, правильно?