我有
vt = x;
和
warning C4244: '=' : conversion from 'int' to 'VARTYPE', possible loss of data
但是代码可以足够稳定地工作,那么如何摆脱这种警告呢?
最佳答案
warning C4244: '=' : conversion from 'int' to 'VARTYPE', possible loss of data
这表示
int
比VARTYPE
宽,并且执行此强制转换会失去精度。但是代码足够稳定
如果您想让自己确信这确实是安全的操作,则应确保执行的测试涵盖范围广泛的
x
值。如果目标使用32位int
,则应确保达到2^16
,2^32-1
之类的值,并且仍能获得预期的结果。如果x
表示数量,则此操作意味着对于超出VARTYPE
表示范围的值,您将获得一个可由VARTYPE
表示的值。例如,如果
VARTYPE
被存储为16位字,而int
被存储为32位字,则随着x
的值从65535增大到65536,vt
将会重置(从65535
到0
)。编辑:您指出
VARTYPE
是unsigned short
,因此请确保避免在声明为int
和VARTYPE
的变量之间进行比较。