【问题标题】:Post-decrement and Pre-decrement operator in C++ [duplicate]C ++中的后递减和预递减运算符[重复]
【发布时间】:2015-06-06 19:09:22
【问题描述】:

我有如下两个代码:

#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,递增和递减运算符(用于前缀和后缀)在关系运算符== 之前。那么两者的预期输出应该是相同的(这里预期是:3 对于两者),但实际上并非如此。

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

【问题讨论】:

    标签: c++ decrement


    【解决方案1】:

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

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

    【讨论】:

    • ... 或如何处理序列点。
    猜你喜欢
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 2014-04-19
    • 2013-06-18
    • 2011-02-16
    相关资源
    最近更新 更多