我有以下代码:
#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 失败。相反,测试以某种方式通过了。这是编译器错误,还是我在某处做了未定义的事情?