我对用于循环的post增量运算符并不是很清楚。 我对post增量运算符的最新和新获得的理解如下:
int a = 5
int b = a++ //a will increment and return back its old value 5
so b = 5
有了这些新知识,我决定理解/将它应用到我常用的后增量运算符的地方,就像for
循环一样。现在好像我迷路了
因为理论上我的输出结果是错误的
考虑以下代码
for(int i=0 ; i< 3 ; i++)
{
std::cout << i;
}
第一次循环
i starts with 0 which is less than 3 so ( increment by 1 however since its i++ it returns old value 0)
so cout should display 1 // But it displays 0
第二圈
i is now 1 which is less than 3 so i++ is applied - Now i is 2 and returns back 1
so cout should display 2 //But it display 1
第三圈
i is now 2 which is less than 3 so i++ is applied - Now i is 3 and returns back 2
so cout should display 3 //But it display 2
第四循环
i is now 3 which is not less than 3 so loop exits
有谁可以请理解我的理解并指出我正确的方向。 输出应该是0,1,2我哪里出错?
答案 0 :(得分:34)
当 for
语句的每个部分发生时
for (int i = 0 ; i < 3 ; i++)
// 111111111 22222 333
现在仔细阅读最后一个要点。 i++
在迭代的 end 完成,在<{em> cout << i
之后完成。并且,在此之后,立即检查继续条件(第二部分)。
所以循环实际上与:
相同{ // Outer braces just to limit scope of i, same as for loop.
int i = 0;
while (i < 3) {
cout << i;
i++;
}
}
那是你获得0 1 2
的原因。
答案 1 :(得分:6)
for
循环中的分号分隔三个不同的表达式。第三个表达式的值与循环的行为无关。您可以将i++
替换为++i
,并且您的循环行为相同;无论哪种方式,i
都会增加1。
要观察增量运算符的行为,请考虑以下循环:
for(int i = 0 ; i++ < 3 ; ) cout << i;
/* ^^^ Nothing here! */
请注意,第三个表达式为空。输出为123
- 跳过0,因为测试(包括增量)发生在循环的每次迭代之前。
后增量循环与具有preincrement运算符的类似循环相比如何表现?
for(int i = 0 ; ++i < 3 ; ) cout << i;
现在输出为12
- 3不会打印,因为条件测试会在递增到值时看到值3
,因此循环退出。
答案 2 :(得分:3)
您只需要知道语句int i = 0
首先执行,即i
首先取值0,检查条件是否为真,然后执行循环体。
然后,i
递增。