警告C4267“正在初始化”:从“ size_t”到“ DWORD”的转换,可能丢失数据

时间:2019-09-16 16:16:14

标签: c++ c++11

在编译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); 

任何人都可以帮助我解决此警告吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

问题是由DWORD的大小落后于std::size_t引起的。如果写

std::size_t nPos = strRegPath.find(REG_SOFTWARE); 

只是将罐子踢了下去,也就是说,您在其他地方得到警告,然后您可以用

static_cast<DWORD>(strRegPath.find(REG_SOFTWARE));

随后,您实质上是在告诉编译器您知道自己在做什么,这足以抑制警告,或者使用可以进行运行时检查的东西来验证您没有丢失数据:{{ 1}}的Boost可以为您提供帮助:

https://www.boost.org/doc/libs/1_38_0/libs/numeric/conversion/doc/html/boost_numericconversion/improved_numeric_cast__.html