вопрос о приоритете операторов C ++ «адрес» и «разрешение области»

Здравствуйте, у меня есть этот код с ошибкой компилятора (ошибка из Microsoft Visual Studio 2008):

class B
{
protected:
int b;
};

class A : public B
{
public:
void foo(){ &B::b; }//  error C2248: 'B::b' : cannot access protected member declared in class 'B'
};

, в то время как этот код не содержит ошибок:

class B
{
protected:
int b;
};

class A : public B
{
public:
void foo(){ &(B::b); }
};

Эти два фрагмента кажутся мне эквивалентными на основе моих знаний о приоритете операторов, потому что :: имеет более высокий приоритет, чем & (см., Например, таблицу 2 на стр. 137 книги "JOINT STRIKE FIGHTER AIR VEHICLE C ++ СТАНДАРТЫ КОДИРОВАНИЯ ДЛЯ РАЗРАБОТКИ СИСТЕМЫ И ПРОГРАММА ДЕМОНСТРАЦИИ " http://www2.research.att.com/~bs/JSF-AV-rules.pdf )

Но они разные ... Я думаю, это что-то связано с" указатель-на-данные-член ", но я не знаю, как это согласуется с приоритетом операторов.

Любое объяснение?

Спасибо, Алессандро

23
задан Alessandro Jacopson 16 February 2011 в 15:50
поделиться