运算符如何优先于++和 - >在递增通过指针增加成员int时工作?

时间:2015-03-06 16:25:15

标签: c++ operator-precedence

有关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。这将导致显着不同(和不正确)的结果。

我在这里缺少什么?

3 个答案:

答案 0 :(得分:2)

http://en.cppreference.com/w/cpp/language/operator_precedence 正如你所看到的,你使用的++运算符,一个前缀运算符,它的杠杆优先级低于 - &gt;。

后缀运算符与 - &gt;。

的级别相同

答案 1 :(得分:1)

前缀++的优先级低于->。因此,表达式

++ptr->data1;  

相同
++(ptr->data1);  

答案 2 :(得分:1)

->的操作顺序高于您调用的前缀 ++增量。因此首先调用->

-> postfix ++增量具有相同的优先顺序,这相当于以下声明......

ptr++->data。我不确定,但我认为它甚至无法解析。