【发布时间】:2017-01-07 07:35:00
【问题描述】:
有人能解释一下为什么这行代码返回 1 吗?
int i = 0;
if(i++) i++;
printf("%d", i);
我的意思是,在检查 if 语句时,i 必须递增,否则结果不会为 1。但是随着它的递增,应该再次递增,结果为 2。
更好的是,为什么这行代码会生成 2?
int i = 0;
if(++i || i++) i++;
还有这个
int i = 0;
if(++i && i++) i++;
返回 3。
【问题讨论】:
-
C11 标准草案 n1570:6.5.2.4 后缀递增和递减运算符 2 后缀 ++ 运算符的结果是操作数的值。[...]结果在更新操作数的存储值的副作用之前排序。
-
i++的result为0,所以if()不被占用。 -
后缀形式在计算表达式后递增存储在变量中的值,因此您在 if() 中有 0 作为测试表达式
-
后增量表示条件检查后增量。将 cout
-
在 if 语句中,
i的值在 递增之前被检查,这就是后缀 ++ 的意思。值是否仍然为零,然后转到 1 则不执行 if 之后的语句,因为 if 条件为零=false。
标签: c if-statement post-increment