I have this problem in my code:
bool CBase::isNumber()
{
return (id & MID_NUMBER);
}
bool CBase::isVar()
{
return (id & MID_VARIABLE);
}
bool CBase::isSymbol()
{
return (id & MID_SYMBOL);
}
FYI: Casts won't hide the warning by design.
Something like
return (id & MID_NUMBER) != 0;
should clearly state "I want to check whether this value is zero or not" and let the compiler be happy
Use the !! idiom eg
bool CBase::isNumber()
{
return !!(id & MID_NUMBER);
}
Where's the declaration of id and MID_NUMBER? Are you sure they are not windef-style BOOLs rather than (lowercase) bool's? BOOL's have been in windef for decades typedef'd as an int; they pre-date proper C++ bool's and a lot of developers still use them.
来源:https://stackoverflow.com/questions/20919650/warning-c4800-int-forcing-value-to-bool-true-or-false-performance-warn