【问题标题】:simple c++ loop prefix postfix operator简单的 C++ 循环前缀后缀运算符
【发布时间】:2013-12-06 18:08:46
【问题描述】:
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int j = 5;
while ( ++j < 9)
cout << j++ << endl;
cin.get();
return 0;
}
所以我正在写一本书,我了解这些东西是如何工作的,但我正在寻求更具体的解释,说明为什么会打印 6 和 8。请帮助我。
谢谢
【问题讨论】:
标签:
c++
loops
post-increment
pre-increment
【解决方案1】:
++j 表示 j 加一,然后计算 j。
另一方面,j++ 表示先计算 j,然后将其增加 1。
【解决方案2】:
要了解它的输出,您需要单步执行代码:
j = 5
j = j + 1 // 6
j < 9 ? yes
output j // 6
j = j + 1 // 7
go to start of loop
j = j + 1 // 8
j < 9 ? yes
output j // 8
j = j + 1 // 9
go to start of loop
j = j + 1 // 10
j < 10 ? no
【解决方案3】:
给定:
int j = 5;
while ( ++j < 9)
cout << j++ << endl;
为什么只打印6 和8?
进入循环后,j 为 5。然后 while (++j ... 将其增加到 6。然后 cout 执行,打印出 6。然后发生 j++ 的副作用,将其增加到7.
在循环的下一次迭代中,++j 再次增加它,得到8,然后打印出来。然后出现j++ 的副作用,将j 递增到9。
然后当while (++j < 9)再次执行时,j已经递增到10,所以while循环退出,不再打印。
【解决方案4】:
++j表示j的值加1然后用在它出现的表达式中
j++ 表示在表达式中使用j的(current)值,之后 j递增
【解决方案5】:
j 从 5 开始。然后递增到 6,然后与 ++j < 9 中的 9 进行比较。这通过了条件,所以我们转到下一行,它输出 6,然后将 j 递增到 7。我们回到条件,j 递增到 8,仍然小于 9,然后输出,然后j 递增到9,条件不成立,程序结束。