从size_t转换为DWORD,可能会丢失数据

时间:2017-08-29 16:40:56

标签: c++ strlen size-t dword lpcstr

我正在VS 2015上构建64位C ++代码。

DWORD testVar;
testVar= strLen((LPCSTR)src);
// where src is a CString.

看到警告 - C4267'参数':从'size_t'转换为'DWORD',可能会丢失数据。

任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:3)

错误消息表明它正在从 size_t转换。这意味着原始值的类型为size_t。除非你有理由需要DWORD,否则你应该保持相同的类型,所以你应该改为

size_t testVar = strLen((LPCSTR)src);

您应该保留相同的数据类型,因为没有机会以这种方式丢失信息,这有助于保持您的应用程序面向未来。如果您使用的是64位整数(可能是size_t,因为您使用的是64位系统),那么如果您想为32位系统编译,则会浪费空间,并且如果你在size_t中有超过64位的话,你将没有足够的空间(这可能相当遥远,但现在有一些专门的领域,即使它还不实用,它会有用谁知道)。一般情况下,您不应该在需要之前转换为其他类型,为此您还不需要。