C++运算符如何工作

may*_*tic 7 c++ operators operator-precedence

鉴于x = 2,y = 1,z = 0,以下语句将显示什么?

printf("answer = %d\n", (x || !y && z));
Run Code Online (Sandbox Code Playgroud)

这是在一个测验,我弄错了,我不记得我的教授覆盖这个,有人开导我...我知道我得到的答案是1,但为什么?

Pra*_*rav 3

该表达式被解释为x || (!y &&z)(检查运算符||,!和的优先级&&

||是一个短路算子。如果左操作数为真(如果||),则无需计算右侧操作数。

在你的情况下x是 true,所以作为布尔表达式,结果将为 1。

编辑

&&和的求值顺序||保证是从左到右。

  • 短路布尔求值意味着如果左侧值足以确定整个表达式的真值,则根本不求右侧值。这既是一种优化,也是在检查左侧指针不为空,然后在右侧取消引用它时必不可少的。对于 || - OR 运算符 - 如果左侧值为 true,则整个表达式为 true,右侧部分不计算。 (2认同)

归档时间:

查看次数:

309 次

最近记录:

9 年,3 月 前