具有预增量的C++箭头运算符:有或没有括号是一样的吗?

Ely*_*Ely 4 c++

课程提问:

观察++运算符参数周围的括号.他们真的需要吗?删除它们会发生什么?

最初只有一个cout表达式.我添加了另一个来看看差异,就像这样:

#include <iostream>
using namespace std;

class Class {
public:

    Class(void) {
        cout << "Object constructed!" << endl;
    }

    ~Class(void) {
        cout << "Object destructed!" << endl;
    }
    int value;
};

int main(void) {
    Class *ptr;

    ptr = new Class;
    ptr -> value = 0;
    cout << ++(ptr -> value) << endl;
    cout << ++(ptr -> value) << endl;
    delete ptr;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的想法是在没有括号的情况下再次测试它,看看有什么不同:

    ...
    cout << ++ptr -> value << endl;
    cout << ++ptr -> value << endl;
    ...
Run Code Online (Sandbox Code Playgroud)

结果在两种情况下都是相同的.因此,我的结论是:没有区别.

有人可以解释并纠正吗?如果没有差异,他们为什么会问这个问题?我的感觉是我遗失了一些微妙之处.

结果:

Object constructed!
1
2
Object destructed!
Run Code Online (Sandbox Code Playgroud)

Tar*_*ama 6

没有区别因为->优先级高于++.这意味着++ptr -> value始终将其解析为++(ptr->value).

无论编译器如何看到您的代码,您都不应该这样写,因为不了解C++运算符优先级规则的人可能会认为代码执行的操作与实际操作不同.++(ptr->value)更清楚.