gpt4 book ai didi

c++ - 'short int'持有的值溢出了,但 'auto'没有?

转载 作者:行者123 更新时间:2023-12-01 15:10:27 24 4
gpt4 key购买 nike

#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/

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