Предупреждение C4800: "BOOL": принудительное значение bool "true" или "false" (предупреждение о производительности)
Когда я компилирую код кода кода ниже в Visual Studio 2008, я получаю это предупреждение.
BOOL
CPlan::getStandardPlan() const
{
return m_standardPlan;
}
bool m_bStandardPlan;
if(plan!=NULL)
{
// Assign the values to the Cola object
poCola->m_lPlanId = plan->getPlanId();
poCola->m_lPlanElementId = plan->getPlanElementId();
poCola->m_lPlanElementBaseId = plan->getPlanElementBaseId();
poCola->m_bStandardPlan = plan->getStandardPlan(); //C4800
return 1;
}
Я ссылался на следующие ссылки:
http://msdn.microsoft.com/en-us/library/b6801kcy%28v=vs.90%29.aspx
Принудительное значение boolean: (bool) делает предупреждение,!! оленья кожа
Предупреждение C4800: 'int': принудительное значение для bool 'true' или 'false' (предупреждение о производительности)
Я не уверен, как исправить это предупреждение.
Ответы
Ответ 1
BOOL
- это typedef для int
где-то в WinAPI. WinAPI - это API C, поэтому они не могут использовать С++ BOOL
. Если вы не можете избавиться от него, вернув BOOL
из функции, например. потому что вы не поддерживаете функцию, то вы можете использовать явную проверку против нуля, чтобы избавиться от предупреждения:
poCola->m_bStandardPlan = (plan->getStandardPlan() != 0);
Еще одно соображение - добавить функцию, которая инкапсулирует проверку:
bool getStandardPlan(CPlan const& plan) {
return plan->getStandardPlan() != 0;
}
а затем
poCola->m_bStandardPlan = getStandardPlan(plan);
Ответ 2
getStandardPlan()
возвращает a BOOL
, который фактически является typedef из int
(0 интерпретируется как false
и все остальные значения как true
). Обычно я решаю эту проблему с помощью тернарного оператора.
poCola->m_bStandardPlan = plan->getStandardPlan() ? true : false;