我一直在深入了解面向对象编程中的操作符优先级。代码如下:
int a=5;
int b=5;
printf("Output %d",a++>b);
return 0;
输出为output 0.
根据我的理解,一元操作符比关系操作符具有更高的优先级。所以a++>b不应该是6>5。这是真的。但是代码输出False。有人能告诉我为什么吗?
提前谢谢你。
你得到false
,因为你在做a++
时使用了后缀自增运算符,这在你的情况下导致比较5 > 5
。
后置自增操作符可以这样考虑。注意:这是非法的代码,只是为了演示:
class int { // if there had been an "int" class
int operator++(int) { // postfix increment
int copy = *this; // make a copy of the current value
*this = *this + 1; // add one to the int object
return copy; // return the OLD value
}
};
如果您使用了前缀自增运算符++a
,那么您将得到比较值6 > 5
-因此得到结果true
。前缀自增运算符可以这样考虑。非法代码:
class int {
int& operator++() { // prefix increment
*this = *this + 1; // add one to the int object
return *this; // return a reference to the actual object
}
};