x64 x32 visual microsoft c++ visual-c++-2010 visual-c++-2008

x32 - microsoft visual c++ 2010 x86



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

Tengo este problema en mi código:

bool CBase::isNumber() { return (id & MID_NUMBER); } bool CBase::isVar() { return (id & MID_VARIABLE); } bool CBase::isSymbol() { return (id & MID_SYMBOL); }


¿Dónde está la declaración de id y MID_NUMBER? ¿Estás seguro de que no son BOOL de estilo windef en lugar de bools (en minúsculas)? Los BOOL han estado en windef durante décadas como un int. son anteriores a Bools de C ++ y muchos desarrolladores aún los utilizan.


FYI: Casts no ocultará la advertencia por diseño .

Algo como

return (id & MID_NUMBER) != 0;

debe indicar claramente "Quiero comprobar si este valor es cero o no" y dejar que el compilador esté contento


Utilizar el !! idioma, por ejemplo

bool CBase::isNumber() { return !!(id & MID_NUMBER); }