Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么这个代码会产生1?_C++ - Fatal编程技术网

C++ 为什么这个代码会产生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;

为什么这个代码会产生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;
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