C++中使用++进行比较时变量值为何会递增?
关于C++中
++运算符在比较表达式里的行为解析 嘿,我来帮你把这个C++里的小坑掰扯清楚!你遇到的问题本质是后置自增运算符i++的执行顺序,先看你给出的两个具体例子:
示例1:打印1到14共14次
对应的代码是:
int i = 0, x = 0; while (x < 30) { x++; if (13 < i++) break; cout << i << endl; }
这里的关键是i++是后置自增:它会先拿i当前的数值去参与13 < i的比较,等比较完成后,再把i的值加1。我们一步步捋:
- 初始
i=0,第一次循环:x变成1,比较13 < 0?不成立,所以不执行break;这时候i已经完成自增变成1,所以cout输出1。 - 接下来每次循环,
i都会先参与比较,再自增。直到i=13那次循环:比较13 < 13?还是不成立,继续输出自增后的i=14。 - 下一次循环,
i=14,比较13 < 14?成立,触发break,循环结束。
所以最终会从1输出到14,一共14次,完全符合你看到的现象。
示例2:打印30个0
对应的完整代码应该是这样(你未写完的部分是条件永远不触发break,且i始终未被修改):
int i = 0, x = 0; while (x < 30) { x++; if (13 < i) break; // 无自增操作,i始终保持初始值0 cout << i << endl; }
这里的条件13 < i永远不成立(因为i从始至终都是0),所以循环会完整执行30次,每次都输出i的初始值0,最终就打印了30个0。
核心知识点总结
- 后置自增
i++:先使用变量当前值参与运算,运算结束后再将变量值+1 - 前置自增
++i:先将变量值+1,再用新值参与运算 - 尽量避免把自增操作和条件判断写在同一行!这种写法不仅可读性差,还容易因为执行顺序踩坑。比如可以把示例1的条件拆分成更清晰的写法:
// 逻辑明确,不易出错 if (13 < i) { break; } i++;
内容的提问来源于stack exchange,提问作者Bella
相关产品推荐
相关产品推荐

