#include <iostream>
using namespace std;
int main()
{
unsigned long maximum = 0;
unsigned long values[] = {60000, 50, 20, 40, 0};
for(short value : values){
cout << "Current value:" << value << "\n";
if(value > maximum)
maximum = value;
}
cout << "Maximum value is: " << maximum;
cout << '\n';
return 0;
}
输出为:Current value:-5536
Current value:50
Current value:20
Current value:40
Current value:0
Maximum value is: 18446744073709546080
我知道我不应该在short
循环内使用for
,最好使用auto
,但是我只是想知道,这是怎么回事?我相信Ubuntu与
g++ 9.3.0
一起使用。
最佳答案
问题是到达元素short value
时的60000
。
这太大了,无法在您的平台上放入short
,因此short
溢出,实现定义的结果。
在您的情况下似乎正在发生的事情是,60000
环绕至负-5536
,然后(以明确定义的方式)转换为unsigned long
,在您的情况下为264-5536:这等于程序显示的最大值。
一种解决方法是使用惯用语
for(auto&& value: values){
关于c++ - 'short int'持有的值溢出了,但 'auto'没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62896195/