C6214
警告 C6214:语义不同的整数类型之间的强制转换: HRESULT 转换为 Boolean 类型
此警告意味着 HRESULT 被强制转换为布尔值类型。HRESULT 的成功值 (S_OK) 等于 0。但是,对于布尔值类型来说,0 指示失败。如果将 HRESULT 强制转换为布尔值类型,然后在测试表达式中使用它,将产生错误的结果。有时,如果将 HRESULT 存储在布尔型变量中,会出现此警告。在任何比较过程中使用布尔型变量来测试 HRESULT 成功还是失败时,可能会导致错误的结果。
示例
下面的代码生成此警告:
#include <windows.h>
BOOL f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if ((BOOL)hr) // warning 6214
{
// success code ...
return TRUE;
}
else
{
// failure code ...
return FALSE;
}
}
若要更正此警告,请使用下面的代码:
#include <windows.h>
BOOL f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// success code ...
return TRUE;
}
else
{
// failure code ...
return FALSE;
}
}
对于此警告,SCODE 类型等效于 HRESULT。
通常,应当使用 SUCCEEDED 或 FAILED 宏来测试 HRESULT 的值。
有关更多信息,请参见下列主题之一:
成功。
失败。
若要利用当今 C++ 内存分配方法,请使用 C++ 标准模板库 (STL) 提供的机制。这些包括shared_ptr, unique_ptr, 和 vector有关更多信息,请参见智能指针(现代 C++)和C++ 标准库参考。