问题
内容来自《C++ primer(第五版)》。
#include <iostream>
int main(void){
for(unsigned u = 10; u >= 0;--u)
{
std::cout << u << std::endl;
}
}
运行结果:
分析:
当u递减到0再次递减时,由于其类型是无符号数,其值不会是-1,而是2^32-1(不一定是32次方,取决于具体编译环境),无符号数的值>=0,条件永远为真,程序会无限循环。
规避
在使用无符号数作循环条件判断的时候,需要特别注意无符号数的值>=0这一事实,
避免再对0作递减,否则将会陷入无限循环。上述代码条件中将“=”去掉则程序正常。