C6214C6214
предупреждение C6214: приведение целочисленных типов с разной семантикой: HRESULT к логическому типуwarning C6214: cast between semantically different integer types: HRESULT to a Boolean type
Это предупреждение означает, что выполняется HRESULT
приведение к логическому типу.This warning indicates that an HRESULT
is being cast to a Boolean type. Значение успеха ( S_OK
) HRESULT
равно 0.The success value (S_OK
) of an HRESULT
equals 0. Однако значение 0 указывает на сбой логического типа.However, 0 indicates failure for a Boolean type. Приведение HRESULT
к логическому типу и его использование в тестовом выражении приведет к неправильному результату.Casting an HRESULT
to a Boolean type and then using it in a test expression will yield an incorrect result. Иногда это предупреждение возникает, если объект HRESULT
хранится в логической переменной.Sometimes, this warning occurs if an HRESULT
is being stored in a Boolean variable. Любое сравнение, использующее логическую переменную для проверки на HRESULT
успешность или ошибку, может привести к неверным результатам.Any comparison that uses the Boolean variable to test for HRESULT
success or failure could lead to incorrect results.
ПримерExample
Это предупреждение создается в следующем коде:The following code generates this warning:
#include <windows.h>
BOOL f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if ((BOOL)hr) // warning C6214
{
// success code ...
return TRUE;
}
else
{
// failure code ...
return FALSE;
}
}
Чтобы исправить это предупреждение, используйте следующий код:To correct this warning, use the following code:
#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
.For this warning, the SCODE
type is equivalent to HRESULT
.
Как правило, SUCCEEDED
FAILED
для проверки значения объекта следует использовать макрос или HRESULT
.Usually, the SUCCEEDED
or FAILED
macro should be used to test the value of an HRESULT
.
Дополнительные сведения см. в одном из следующих разделов:For more information, see one of the following topics:
Чтобы использовать современные методологии выделения памяти C++, используйте механизмы, предоставляемые библиотекой стандартных шаблонов C++ (STL).To leverage modern C++ memory allocation methodology, use the mechanisms that are provided by the C++ Standard Template Library (STL). К ним относятся shared_ptr, unique_ptrи vector.These include shared_ptr, unique_ptr, and vector. Дополнительные сведения см. в разделе интеллектуальные указатели и Стандартная библиотека C++.For more information, see Smart Pointers and C++ Standard Library.