首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ternary中使用三值运算符会产生意外的输出。

在ternary中使用三值运算符会产生意外的输出。
EN

Stack Overflow用户
提问于 2020-02-05 18:24:24
回答 2查看 55关注 0票数 0

我试着理解三元运算是怎么给我这个输出的。我希望条件会在真==错误求值为false时短路,但是return_value的结果在这段代码中是正确的。

代码语言:javascript
复制
#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
}                                                                                       }

如果我把括号放在最后一个条件(假?(true == false):true)然后得到我期望的输出。

有我误解的操作顺序吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-05 18:27:17

似乎隐含的操作顺序是

代码语言:javascript
复制
bool return_value = (true == false && true == false && false)
                  ? (true == false)
                  : true;

而不是

代码语言:javascript
复制
bool return_value = true == false &&
                    true == false &&
                    (false ? (true == false) : true);
票数 4
EN

Stack Overflow用户

发布于 2020-02-05 18:39:00

声明的初始化

代码语言:javascript
复制
bool return_value = true == false &&
                    true == false &&
                    false ? (true == false) : true;

可以等效地重写如下

代码语言:javascript
复制
bool return_value = ( true == false && true == false && false ) ? (true == false) 
                                                                : true;

作为逻辑表达式的结果,计算结果为false,然后返回第三个(转让人-表达式),即true

根据C++语法,条件运算符的定义如下

代码语言:javascript
复制
conditional-expression:
    logical-or-expression
    logical-or-expression ? expression : assignment-expression

这句话

代码语言:javascript
复制
true == false && true == false && false

是一个逻辑或表达式,它依次在C++语法中定义,如

代码语言:javascript
复制
logical-or-expression:
    logical-and-expression
    logical-or-expression || logical-and-expression
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60081917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档