我有

vt = x;




warning C4244: '=' : conversion from 'int' to 'VARTYPE', possible loss of data


但是代码可以足够稳定地工作,那么如何摆脱这种警告呢?

最佳答案

warning C4244: '=' : conversion from 'int' to 'VARTYPE', possible loss of data


这表示intVARTYPE宽,并且执行此强制转换会失去精度。


  但是代码足够稳定


如果您想让自己确信这确实是安全的操作,则应确保执行的测试涵盖范围广泛的x值。如果目标使用32位int,则应确保达到2^162^32-1之类的值,并且仍能获得预期的结果。如果x表示数量,则此操作意味着对于超出VARTYPE表示范围的值,您将获得一个可由VARTYPE表示的值。

例如,如果VARTYPE被存储为16位字,而int被存储为32位字,则随着x的值从65535增大到65536,vt将会重置(从655350)。

编辑:您指出VARTYPEunsigned short,因此请确保避免在声明为intVARTYPE的变量之间进行比较。

10-01 20:08