I've got the following code:
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
string a = "a";
for(unsigned int i=a.length()-1; i+1 >= 1; --i)
{
if(i >= a.length())
{
cerr << (signed int)i << "?" << endl;
return 0;
}
}
}
如果我使用MSVC进行全面优化的编译,输出结果是“-1?”。如果我在调试模式(无优化)下编译,则没有输出(预期)。我认为标准保证了无符号整数以可预测的方式溢出,因此当i = (unsigned int)(-1)时,i + 1 = 0,并且循环条件i + 1 >= 1失败。但是,测试却通过了。这是编译器bug还是我在某个地方做了未定义的事情?