visual tutorial studio microsoft instalar descargar c++ visual-studio visual-c++

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

Advertencia C4800: ''int'': forzando el valor a bool ''true'' o ''false'' (advertencia de rendimiento)

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;