对于我总是用于循环的post增量运算符,我并不是很清楚.我对post增量运算符的最新和新获得的理解如下:
int a = 5
int b = a++ //a will increment and return back its old value 5
so b = 5
Run Code Online (Sandbox Code Playgroud)
有了这些新知识,我决定理解/应用于我常用的后增量运算符的地方for.现在好像我迷失了,因为理论上我输错了输出
请考虑以下代码
for(int i=0 ; i< 3 ; i++)
{
std::cout << i;
}
Run Code Online (Sandbox Code Playgroud)
第一个循环
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
Run Code Online (Sandbox Code Playgroud)
第二圈
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
Run Code Online (Sandbox Code Playgroud)
第三圈
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
Run Code Online (Sandbox Code Playgroud)
第四循环
i is now 3 which is not less than 3 so loop exits
Run Code Online (Sandbox Code Playgroud)
任何人都可以清楚我的理解并指出我正确的方向.输出应该是0,1,2我哪里出错了?
pax*_*blo 34
您遗漏的是当for声明的每个部分发生时:
for (int i = 0 ; i < 3 ; i++)
// 111111111 22222 333
Run Code Online (Sandbox Code Playgroud)
现在仔细阅读最后一个要点.这i++是在迭代结束后完成的cout << i.并且,在此之后,立即检查继续条件(第二部分).
所以循环实际上与以下相同:
{ // Outer braces just to limit scope of i, same as for loop.
int i = 0;
while (i < 3) {
cout << i;
i++;
}
}
Run Code Online (Sandbox Code Playgroud)
这就是你得到的原因0 1 2.
for循环中的分号分隔三个不同的表达式.第三个表达式的值与循环的行为无关.你可以替换i++,++i你的循环会表现相同; 无论哪种方式,i都会增加1.
要观察增量运算符的行为,请考虑以下循环:
for(int i = 0 ; i++ < 3 ; ) cout << i;
/* ^^^ Nothing here! */
Run Code Online (Sandbox Code Playgroud)
请注意,第三个表达式为空.123跳过输出-0是因为测试(包括增量)在循环的每次迭代之前发生.
与使用preincrement运算符的类似循环相比,后增量循环的行为如何?
for(int i = 0 ; ++i < 3 ; ) cout << i;
Run Code Online (Sandbox Code Playgroud)
现在输出为12-3不打印,因为条件测试3一旦增加到该值就看到该值,因此循环退出.