代码之家  ›  专栏  ›  技术社区  ›  Jonathan Owens

在条件中使用三元运算符会产生意外输出

  •  0
  • Jonathan Owens  · 技术社区  · 5 年前

    真==假 评估为错误,但结果 返回值 在这段代码中是正确的。

    #include <iostream>
    
    int main()
    {
        bool return_value = true == false &&
                            true == false &&
                            false ? (true == false) : true; // add parens to see expected output (false ? (true == false) : true);
    
        std::cout << std::boolalpha << return_value << std::endl;
    
        // expected output: false                                                                                                  
        // actual output  : true
    }                                                                                       }
    

    如果我在最后一个条件周围加上括号 然后我得到我期望的输出。

    有没有我误解的操作顺序?

    2 回复  |  直到 5 年前
        1
  •  4
  •   Michael Bianconi    5 年前

    似乎操作的隐式顺序是

    bool return_value = (true == false && true == false && false)
                      ? (true == false)
                      : true;
    

    而不是

    bool return_value = true == false &&
                        true == false &&
                        (false ? (true == false) : true);
    
        2
  •  1
  •   Vlad from Moscow    5 年前

    bool return_value = true == false &&
                        true == false &&
                        false ? (true == false) : true;
    

    可以像

    bool return_value = ( true == false && true == false && false ) ? (true == false) 
                                                                    : true;
    

    如果逻辑表达式的结果计算为false,则返回第三个(assignmeny表达式),即 true .

    conditional-expression:
        logical-or-expression
        logical-or-expression ? expression : assignment-expression
    

    还有这个表情

    true == false && true == false && false
    

    是在C++语法中定义的逻辑或表达式。

    logical-or-expression:
        logical-and-expression
        logical-or-expression || logical-and-expression