gpt4 book ai didi

c++ - 警告C26451:算术溢出(当减去两个整数时)

转载 作者:行者123 更新时间:2023-12-02 10:17:33 25 4
gpt4 key购买 nike

执行以下代码行时:

int max = 50, min = -30;
double num = rand() % (max - min) - min;

我从Visual Studio 2019中收到以下警告:

警告C26451算术溢出:在4字节值上使用运算符'-',然后将结果转换为8字节值。在调用运算符“-”之前,将值强制转换为更宽泛的类型,以避免溢出(io.2)。

我不确定这是如何应用的,因为我要取一个double的模数,它将返回并取整数,然后从中减去另一个整数,然后将其存储在double中(我很确定这不是问题)。

这是错误还是我正在做可能导致截断等操作?

谢谢

最佳答案

差异(两次相减)都可能导致溢出。如果从正值减去负值或从负值减去正值,可能会发生溢出。

例如,如果从最大可能值中减去负数,则会溢出。

由于您拥有较宽的目的地类型,因此您可能希望此较宽的结果适合该较宽的类型而不会溢出。除非您强制转换其中一个操作数,否则不会发生这种情况。

我认为在此处进行此类转换不切实际,因为您使用%运算符,所以这不适用于double。而且无论如何,它不会处理溢出,只是因为您在这里不能超过rand()的范围。

显然,如果您想修复rand()可能造成的溢出,则需要在范围内添加std::uniform_int_distribution。这样可以解决其他rand()问题(线程安全性和良好的随机性),但是也会增加一些复杂性。

但是,请确保您始终处于-30至50的范围内,没有溢出,并且可以将其视为错误警告。如果您确实有int max = 50, min = -30;,我什至将其视为发出此警告的静态分析错误。当然静态分析不能预测rand()的结果,但是有%可以截断它。如果您愿意,可以使用帮助>发送反馈>报告问题。

关于c++ - 警告C26451:算术溢出(当减去两个整数时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61443963/

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