让我们假设具有以下代码:
struct Foo {
int _data;
};
struct Bar : public Foo {
int* bar() {
return &Foo::_data; // <--- Compiler ERROR!
}
};
表达式&Foo::_data
被评估为int Foo::*
(即int
指向类Foo
的成员的指针)。因此,由于没有隐式强制转换,因此return语句会生成编译器错误。
当然,很容易解决此问题:return &(Foo::_data);
。
实际上,我的意图是返回一个指向变量_data
的指针。
根据C++ precedence operator table,operator::
的优先级应高于operator&
。
我的问题是:为什么没有括号似乎operator&
的优先级更高?
注意:在不同的编译器和版本之间,编译器错误似乎是一致的。所以我可能缺少一些东西:)
注意:我对如何解决问题不感兴趣(我已经提出了问题的解决方案,或者只是使用_data
)。我更想了解为什么我的假设不正确。