为什么这段代码产生1?

时间:2017-03-21 09:30:20

标签: c++

为什么这段代码产生1?有人,请为我描述一下。

#include <iostream>

using namespace std;

int main(){
  int x = 0;
  int y = 0;

  if (x++&&y++){
    y += 2;
  }
  cout << x + y << endl;

  return 0;
}

2 个答案:

答案 0 :(得分:7)

  • 最初x和y为0
  • 因此x ++的计算结果为false,而&amp;&amp;的第二个操作数。永远不会被评估。 x ++确实将x递增为1.由于条件为false,因此不会输入条件分支。
  • x + y是1 + 0,等于1

答案 1 :(得分:2)

user2079303很好地解释了(已经是我的+1),作为扩展,我会详细介绍一下:

if(x++)在增量之前评估x 的值,因此这段代码相当于以下内容(需要缓冲旧值!):

int tmp = x;
x++;
if(tmp) 

请注意,在c && cc内,如果cc已经为假,则不再评估第二个条件c!所以if(x && y)相当于

if(x)
{
    if(y)
    {
        // ...
    }
}

将所有这些放在一起,你的代码就等同于这个变体,我将if子句分成代码行,每个代码行只包含一条指令:

int x = 0;
int y = 0;

int tmp = x;
x++;
if(tmp)
{
   tmp = y;
   y++;
   if(tmp)
       y += 2;
}

假设,您的输出现在非常明显......