为什么这段代码产生 1.

Why this code produce 1?

本文关键字:代码 段代码 为什么      更新时间:2023-10-16

为什么这段代码产生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;
}
  • 最初 x 和 y 为 0
  • 因此,x++ 的计算
  • 结果为 false,并且 && 的第二个操作数永远不会被计算。 x++ 确实将 x 递增为 1。由于条件为 false,因此不会输入条件分支。
  • x + y 是 1 + 0,等于 1

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;
}

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