您好,我的代码存在编译器错误(错误来自 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); }
};
根据我对运算符优先级的了解,这两个片段在我看来是等效的,因为::
它的优先级高于(例如,参见“用于系统开发和演示程序的联合攻击战斗机 C++ 编码标准”&
的第 137 页的表 2 )
但它们是不同的......我认为它与“指向数据成员的指针”有关,但我不知道它如何符合运算符优先级。
有什么解释吗?