C ++中的post-decrement和Pre-decrement运算符

时间:2015-06-06 19:09:23

标签: c++ decrement

我有两个代码,如下所示:

#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两者),但实际上它不是。

有任何帮助吗?如果上述情况导致未定义的行为,请解释原因。

1 个答案:

答案 0 :(得分:2)

运算符优先级告诉如何解析表达式(添加括号),而不是评估顺序。

所以--a == b被有效地解析为(--a) == b而不是--(a == b)