带有整数的C ++布尔值

时间:2018-01-26 19:29:01

标签: c++ integer boolean

好的很明显这个问题对于经验丰富的人来说可能听起来很愚蠢,但是,对于以下几行,我得到的结果是 0

int x = 2,
y = -2;

cout << (x++ - y && (--x + y));

我理解这意味着这两个表达式中的任何一个等于0,但是如何?据我了解,这应该是(3&amp;&amp; -1)?

另外,有点小问题:x ++什么时候生效?在同一个表达式中的下一个x出现,在同一行中的左移运算符之后,还是在下一个语句中?

谢谢!

1 个答案:

答案 0 :(得分:4)

  

据我了解,这应该是(3&amp;&amp; -1)?

你理解错误:

第一个左侧是完全评估的,因为逻辑and进行短路评估是必要的(可以找到详细信息here

x++ - y == 4 // as result of x++ == 2 so (2-(-2)), after that x == 3

结果为true,因此评估右侧:

--x + y ==  0 // as result of --x == 2 so (2+(-2)), after that x == 2

右侧的结果为false,因此and的结果为falsestd::ostream打印为0

注意:逻辑orand操作的短路评估使这些代码有效(使它们排序)但你最好避免这种可疑的表达式。例如,简单地将逻辑and替换为二进制将使其成为UB。