范围解析优先

时间:2018-10-23 15:05:40

标签: c++ operator-precedence

让我们假设具有以下代码:

struct Foo {
  int _data;
};

struct Bar : public Foo {
  int* bar() {
    return &Foo::_data;  // <--- Compiler ERROR!
  }
};

表达式&Foo::_data被评估为int Foo::*(即int指向类Foo的成员的指针)。因此,由于没有隐式强制转换,因此return语句会生成编译器错误。

Godbolt Snippet Here

当然,很容易解决此问题:return &(Foo::_data);。 实际上,我的意图是返回一个指向变量_data的指针。

根据C++ precedence operator tableoperator::的优先级应高于operator&

我的问题是:为什么没有括号似乎operator&的优先级更高?


注意:在不同的编译器和版本之间,编译器错误似乎是一致的。所以我可能缺少一些东西:)

注意:我对如何解决问题不感兴趣(我已经提出了问题的解决方案,或者只是使用_data)。我更想了解为什么我的假设不正确。

0 个答案:

没有答案