gpt4 book ai didi

c++ - MSVC++ : Strangeness with unsigned ints and overflow

转载 作者:可可西里 更新时间:2023-11-01 17:36:29 25 4
gpt4 key购买 nike

我有以下代码:

#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?”。如果我在 Debug模式下编译(没有优化),我不会得到任何输出(预期。)

我认为标准保证无符号整数以可预测的方式溢出,因此当 i = (unsigned int)(-1)、i+1 = 0 时,循环条件 i + 1 >= 1 失败。相反,测试以某种方式通过了。这是编译器错误,还是我在某处做了未定义的事情?

最佳答案

我记得在 2001 年遇到过这个问题。我很惊讶它仍然存在。是的,这是一个编译器错误。

优化器看到了

i + 1 >= 1;

理论上,我们可以通过将所有常量放在同一侧来优化它:

i >= (1-1);

因为 i 是无符号的,所以它总是大于或等于零。

查看此新闻组讨论 here .

关于c++ - MSVC++ : Strangeness with unsigned ints and overflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/675976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com