课程提问:
观察++运算符参数周围的括号.他们真的需要吗?删除它们会发生什么?
最初只有一个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)
没有区别因为->优先级高于++.这意味着++ptr -> value始终将其解析为++(ptr->value).
无论编译器如何看到您的代码,您都不应该这样写,因为不了解C++运算符优先级规则的人可能会认为代码执行的操作与实际操作不同.++(ptr->value)更清楚.