为什么这段代码产生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;
}
答案 0 :(得分:7)
答案 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;
}
假设,您的输出现在非常明显......