加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用\u0026\u0026 ||进行短路评估操作者

发布时间:2020-12-16 10:02:37 所属栏目:百科 来源:网络整理
导读:我知道什么是C中的短路评估. a b(如果a = 0,则不检查操作数b) a || b(如果a =非零,则不检查操作数b) 但我坚持这个问题 int x = 0;if (5 || 2 ++x) printf("%d",x); 这输出0. 我的第一个想法如下: 根据优先级表,优先级是,|| (降序排列) x:evaluated.x成为1.
我知道什么是C中的短路评估.

a&& b(如果a = 0,则不检查操作数b)

a || b(如果a =非零,则不检查操作数b)

但我坚持这个问题

int x = 0;
if (5 || 2 && ++x)
    printf("%d",x);

这输出0.

我的第一个想法如下:

根据优先级表,优先级是&&,|| (降序排列)

> x:evaluated.x成为1.
> 2&& x评估.两个操作数都被评估.
> ||被评估.

但据此,应该打印1,而不是0.

我的第二个想法是:

5 || anything

由于短路评估,任何事情都没有被评估,所以这里没有优先权.

解决方法

表达式5 || 2&& x相当于5 || (2&& x)由于运算符优先级.

运行时计算表达式5 || 2&& x从左到右.

正如我们在OR中所知,如果第一个条件为真,则不会检查第二个条件.
所以这里5被评估为真,因此(2&& x)将不会被执行.

这就是为什么x将保持为0.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读