对于三元操作,“警告:......的操作可能是未定义的” - 不是if / else阻止

时间:2016-02-14 06:51:20

标签: c++ ternary-operator

这是我的代码:

int main() {
    static int test = 0;
    const int anotherInt = 1;
    test = anotherInt > test ? test++ : 0;
    if (anotherInt > test)
        test++;
    else
        test = 0;
    return 0;
}

这是我构建它时产生的警告:

../main.cpp:15:40: warning: operation on ‘test’ may be undefined [-Wsequence-point]
  test=     anotherInt>test ? test++ : 0;
                                        ^

为什么C ++会对三元操作发出警告,而不是常规if..else语句?

2 个答案:

答案 0 :(得分:3)

它们并不等同。请注意,在三元运算符表达式中,您将结果分配给test

if条件更改为:

if(anotherInt > test)
    test = test++;  // undefined!

你可能也会在这里看到同样的警告。

答案 1 :(得分:-3)

你可能知道在这段代码中:anotherInt> test? test ++:0;计算机可能首先运行test ++,也许运行另一个>测试? first.so在表达式中,如果你使用变量,你不应该在这个表达式的其他地方改变它.U可以将test ++改为test + 1.