c++ - tutorial - advertencia C4800: ''BOOL'': forzando el valor a bool ''true'' o ''false''(advertencia de rendimiento)
visual studio c++ descargar (2)
BOOL
es un typedef para int
en algún lugar de WinAPI. WinAPI es una API de C, por lo que no pueden usar el bool
C ++. Si no puede deshacerse de ella devolviendo un bool
de la función, por ejemplo, porque no mantiene la función, entonces puede usar una comprobación explícita contra cero para deshacerse de la advertencia:
poCola->m_bStandardPlan = (plan->getStandardPlan() != 0);
Otra consideración sería agregar una función que encapsule el cheque:
bool getStandardPlan(CPlan const& plan) {
return plan->getStandardPlan() != 0;
}
y entonces
poCola->m_bStandardPlan = getStandardPlan(plan);
Cuando compilo el siguiente código de fragmento de código en Visual Studio 2008, recibo esta advertencia.
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;
}
Me referí a los siguientes enlaces,
http://msdn.microsoft.com/en-us/library/b6801kcy%28v=vs.90%29.aspx
Forzando el valor a booleano: (bool) hace una advertencia, !! no
No estoy seguro de cómo solucionar estas advertencias.
getStandardPlan()
devuelve un BOOL
que en realidad es un typedef de un int
(0 se interpeta como false
y todos los demás valores como true
). Suelo solucionar este problema con el operador ternario.
poCola->m_bStandardPlan = plan->getStandardPlan() ? true : false;