C if语句及其正文中双重后增量的结果
有人能解释一下为什么这一行代码返回1吗C if语句及其正文中双重后增量的结果,c,if-statement,post-increment,C,If Statement,Post Increment,有人能解释一下为什么这一行代码返回1吗 int i = 0; if(i++) i++; printf("%d", i); 我的意思是,当检查if语句I时,必须递增,否则结果不会是1。但是当它增加时,is应该再次增加,结果是2 更好的是,为什么这行代码会产生2 int i = 0; if(++i || i++) i++; 还有这个 int i = 0; if(++i && i++) i++; 返回3。 代码行if(i++)在递增之前检查i的值。因此检查失败,因为i=0,检查后
int i = 0;
if(i++) i++;
printf("%d", i);
我的意思是,当检查if语句I
时,必须递增,否则结果不会是1。但是当它增加时,is应该再次增加,结果是2
更好的是,为什么这行代码会产生2
int i = 0;
if(++i || i++) i++;
还有这个
int i = 0;
if(++i && i++) i++;
返回3。- 代码行
在递增之前检查if(i++)
的值。因此检查失败,因为i
,检查后,i=0
将在离开i
条件之前递增,使其等于1李>if
- 但是
通过,因为在检查条件之前对如果(++i | | i++)
求值,该条件求值为1,条件将为真,然后对++i
求值,结果为2李>i++
- 另外,由于++i将是1,而i++也仍然是1,因为我将在其递增之前首先使用。因此1&&1为真,然后在离开条件之前,i将增加到2,if下面的行也将计算为3,i的新值将为3
i++
的结果为0,因此if()
不接受。后缀形式会在表达式求值后增加存储在变量中的值,因此在if()中有0作为测试表达式。后增量表示它在检查条件后增加。在if语句中放入cout之类的内容,在递增之前检查i
的值,这就是postfix++的含义。如果值仍然为零,则转到1,则不会执行if后的语句,因为if条件为零=false。但是,当我有if(++I&&I++)I++代码>结果是3。@Liseł:为了更有趣,如果(++i&&--i)i++,代码>结果?@CecilWard当第二部分涉及第一部分时,您可以信赖第二部分未被评估。例如如果(n>=0&&array[n]==42)
。除非第一部分是true
@EOF:“为了更有趣,如果(++i&&--i)i++;
导致什么?“--失败的代码审查,第二部分就不能进行评估。”——请孩子们,不要这样写代码,不要要求其他维护人员经常查看标准的详细信息。通过将大量内容塞进单个复杂的if语句或将副作用放入测试中,您不会生成更好或更差的代码。