Здравствуйте, у меня есть этот код с ошибкой компилятора (ошибка из 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++ СТАНДАРТЫ КОДИРОВКИ ДЛЯ ПРОГРАММЫ РАЗРАБОТКИ СИСТЕМЫ И ДЕМОНСТРАЦИИ )
Но они разные... Я думаю, что это что-то связанное с указателем на элемент данных, но я не знаю, как это согласуется с приоритетом операторов.
Любое объяснение?
int* i = &(A::b);
, ноint A::*m = &A::b;
- person Gene Bushuyev   schedule 16.02.2011