无限for循环中i++位置不同为何导致执行结果差异?
两段代码执行差异的原因解析
代码片段1
int i=1; for(;;){ if (i<5){ cout<<"Hello World"<<endl; i++; } }
代码片段2
int i=1; for(;;){ if (i<5){ cout<<"Hello World"<<endl; } i++; }
执行流程差异分析
代码片段1:
变量i初始值为1,进入无限for循环后,只有当i<5成立时,才会执行打印操作,同时让i自增1。当i增加到5时,i<5不成立,既不打印也不执行i++,此后i的值一直保持5,每次循环都不满足打印条件,所以只会输出4次"Hello World",之后循环空转无输出。代码片段2:
同样i初始值为1,前4次循环和代码1一致:满足i<5时打印,然后执行i++。但当i增加到5后,虽然i<5不成立不会打印,但i++是在if代码块外面,每次循环都会执行。此时i会持续递增到6、7、8……直到达到int类型的最大值,再执行i++会触发整数溢出(多数编译器下会绕回成负数),负数必然小于5,于是又会开始打印,之后i继续递增,循环往复,导致无限输出"Hello World"。
核心区别
两者的本质差异在于i++的执行条件:
- 代码1中
i++仅在满足打印条件时执行,一旦i≥5就停止递增,永远无法再触发打印; - 代码2中
i++不受if条件限制,每次循环必执行,i会无限递增直至溢出变负,再次满足打印条件,形成无限打印的循环。
内容的提问来源于stack exchange,提问作者Utkarsh Kumar
相关产品推荐
相关产品推荐

