C++ 为什么这个代码会产生1?
为什么这个代码会产生1?有人,请给我描述一下C++ 为什么这个代码会产生1?,c++,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; } #包括 使用名称空间std; int main(){ int x=0; int y=0;
#include <iostream>
using namespace std;
int main(){
int x = 0;
int y = 0;
if (x++&&y++){
y += 2;
}
cout << x + y << endl;
return 0;
}
#包括
使用名称空间std;
int main(){
int x=0;
int y=0;
if(x++&&y++){
y+=2;
}
cout
- 最初x和y为0
- 因此,x++的计算结果为false,并且永远不会计算&&的第二个操作数。x++会将x增加到1。由于条件为false,因此不会输入条件分支
- x+y是1+0,等于1
user2079303很好地解释了(+1),作为扩展,我将更详细地介绍:
if(x++)
在递增之前计算x的值,因此这段代码相当于以下内容(需要缓冲旧值!):
inttmp=x;
x++;
如果(tmp)
请注意,在c&&cc
中,如果c
已为false,则第二个条件cc
不再计算!因此if(x&&y)
等同于
if(x)
{
如果(y)
{
// ...
}
}
综上所述,您的代码相当于此变体,我将if子句分为代码行,每行只包含一条指令:
intx=0;
int y=0;
int tmp=x;
x++;
如果(tmp)
{
tmp=y;
y++;
如果(tmp)
y+=2;
}
假设您现在的输出非常明显…您希望得到什么结果?请记住,布尔运算符使用短路求值。增量后运算符返回原始值(增量前)。并且零等于false
。