【发布时间】:2019-09-16 16:16:14
【问题描述】:
编译我的 C++ 应用程序时收到以下警告消息,
警告 C4267 'initializing':从 'size_t' 转换为 'DWORD',可能会丢失数据 在下面一行:
DWORD nPos = strRegPath.find(REG_SOFTWARE);
以下是我的完整代码:
声明:
#define REG_SOFTWARE L"Software"
wchar_t* m_wszParams;
定义:
wstring strRegPath = m_wszParams;
DWORD nPos = strRegPath.find(REG_SOFTWARE);
谁能帮我解决这个警告?
提前致谢。
【问题讨论】:
-
DWORD在 MSWindows 中是 32 位 unisgned 类型。size_t在任何 64 位操作系统中都是 64 位无符号的。因此将 64 位转换为 32 位可能会丢失数据。 -
除非您的字符串长度超过 32 位无符号数(即 2GB),否则不会给您带来问题,但您为什么希望这是
DWORD? -
auto可以使用真实类型。 (即使稍后,您也可能需要转换)。