Почему enum доступен с помощью оператора разрешения области видимости? - PullRequest
1 голос
/ 26 февраля 2012
#include <iostream>

using namespace std;

class Sample{
public:
   enum{ x = 10 };
};

int main(){
   cout<<Sample::x<<endl;
   return 0;
}

Почему x, который является enum в классе, доступен с помощью оператора разрешения области видимости в главной функции?

Ответы [ 3 ]

7 голосов
/ 26 февраля 2012

Я предполагаю, что вы спрашиваете, почему вам не нужно создавать экземпляр Sample для доступа к x.Причина в том, что enum s подобны typedef s: они создают новый тип, они не создают переменную.Вы можете получить доступ к Sample::x так же, как и к объявлению typedef или struct / class внутри класса.

1 голос
/ 26 февраля 2012

Поскольку enum определено в области public.Прокомментируйте ключевое слово public, и вы не сможете получить к нему доступ.То же самое относится к любому typedef, который вы объявляете в публичной / закрытой области.

0 голосов
/ 02 сентября 2017

Поскольку enum s в CPP имеет внутреннюю связь по умолчанию, т.е. они становятся приватными , если вы объявите их в struct or class. Поэтому вы должны использовать :: ( оператор разрешения области действия ) для доступа к перечислителям (константы перечисления).

В C вы можете получить доступ к перечислителям напрямую, потому что они global по умолчанию.

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