有关C ++语言律师的问题。它看起来很简单,但我试图弄清楚我的简单程序到底发生了什么。
struct A
{
int data1;
int data2;
};
int main()
{
A myA;
A* ptr = &myA;
ptr->data1 = 100;
++ptr->data1;
std::cout << "A: " << myA.data1 << std::endl;
return 1;
}
以上正确工作并在我的gcc 4.8.2上输出101。
根据我在线阅读++和 - &gt;的内容。运算符具有相同的优先级(https://msdn.microsoft.com/en-us/library/126fe14k.aspx),因此我希望优先级从左到右。
如果我解释了从左到右的优先顺序,那么我希望++ ptr首先执行而不是ptr-&gt; data1。这将导致显着不同(和不正确)的结果。
我在这里缺少什么?
答案 0 :(得分:2)
http://en.cppreference.com/w/cpp/language/operator_precedence 正如你所看到的,你使用的++运算符,一个前缀运算符,它的杠杆优先级低于 - &gt;。
后缀运算符与 - &gt;。
的级别相同答案 1 :(得分:1)
前缀++
的优先级低于->
。因此,表达式
++ptr->data1;
与
相同++(ptr->data1);
答案 2 :(得分:1)
->
的操作顺序高于您调用的前缀 ++
增量。因此首先调用->
。
->
与 postfix ++
增量具有相同的优先顺序,这相当于以下声明......
ptr++->data
。我不确定,但我认为它甚至无法解析。