为什么这段代码产生 1.
Why this code produce 1?
为什么这段代码产生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;
}
假设,您现在的输出非常明显...
相关文章:
- 在java中解决这段代码时面临循环中的问题
- 修改 VS Code 中的默认C++代码段
- 我是如何在这段代码中出现分段错误的
- 我不明白这段代码是如何对这个pythonlist()进行排序的,也不明白如何用C++中的向量来重现它
- 为什么这段代码不起作用,我该如何解决?
- 为什么这段代码给我错误? 有没有自错?
- 有人可以解释一下这段代码如何能够反转字符串
- 可能我知道为什么这段代码没有给出任何输出吗?
- 这段代码的最后一行在做什么?
- 我不知道为什么这段代码会让核心被转储?
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- 有人可以向我解释一下这段代码的作用吗?
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 为什么这段代码会导致无限循环?
- 为什么代码段会引发浮点异常?
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 如何为一段代码启用 -permissive
- 如何知道用于实现标准代码段的确切数据结构和算法,例如在C++STL中?
- 为什么下面的代码段返回指针指向的值而不是指针的地址?
- 谁能告诉我为什么这段代码没有产生正确的输出?