C++中使用预定义布尔变量作为for循环条件出现无限循环的原因
问题原因分析
核心问题是condition变量仅做了一次初始化赋值,不会随着i的变化自动更新:
- 你执行
bool condition = i < 5;这条语句时,i的值为0,此时condition就被固定赋值为true,该赋值操作只会执行一次,不会在每次循环时自动重新计算i < 5的结果 - 你写的
for ( ; condition ; )循环每次校验的都是已经固定为true的condition变量,哪怕循环体中i的值已经累加超过5,condition的值也不会发生变化,最终就会触发无限循环
修复方案
两种常见修改方式可选:
- 直接将判断条件写入for循环的条件位,让程序每次循环都重新计算条件结果:
#include<iostream> int main(){ int i {0}; for ( ; i < 5 ; ){ std::cout << "Hello World!" << std::endl; i++; } }
- 如果你需要单独抽离条件变量,就在循环条件位每次更新变量值:
#include<iostream> int main(){ int i {0}; bool condition; for ( ; condition = i < 5 ; ){ std::cout << "Hello World!" << std::endl; i++; } }
内容的提问来源于stack exchange,提问作者Ken Za
相关产品推荐
相关产品推荐

