在编译C ++应用程序时,我收到以下警告消息,
警告C4267“正在初始化”:从“ 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);
任何人都可以帮助我解决此警告吗?
谢谢。
答案 0 :(得分:1)
问题是由DWORD
的大小落后于std::size_t
引起的。如果写
std::size_t nPos = strRegPath.find(REG_SOFTWARE);
只是将罐子踢了下去,也就是说,您在其他地方得到警告,然后您可以用
static_cast<DWORD>(strRegPath.find(REG_SOFTWARE));
随后,您实质上是在告诉编译器您知道自己在做什么,这足以抑制警告,或者使用可以进行运行时检查的东西来验证您没有丢失数据:{{ 1}}的Boost可以为您提供帮助: