我有两个代码,如下所示:
#include <iostream>
int main() {
int a = 4;
if ( a == a--){
std::cout << a << std::endl;
std::cout << "HELLO"<<std::endl;
}
std::cout << a << std::endl;
return 0;
}
输出为:3
并为此:
#include <iostream>
int main() {
int a = 4;
if ( a == --a){
std::cout << a << std::endl;
std::cout << "HELLO"<<std::endl;
}
std::cout << a << std::endl;
return 0;
}
输出是:
3
HELLO
3
根据C++ operator precedence,递增和递减运算符(对于前缀和后缀)在关系opertor ==
之前。然后两者的预期输出应该相同(这里预期为:3
两者),但实际上它不是。
有任何帮助吗?如果上述情况导致未定义的行为,请解释原因。
答案 0 :(得分:2)
运算符优先级告诉如何解析表达式(添加括号),而不是评估顺序。
所以--a == b
被有效地解析为(--a) == b
而不是--(a == b)
。