web-dev-qa-db-fra.com

Avertissement C4800: 'int': forcer la valeur à bool 'true' ou 'false' (avertissement de performance)

J'ai ce problème dans mon code:

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

bool CBase::isVar()
{
return (id & MID_VARIABLE);
}

bool CBase::isSymbol()
{
return (id & MID_SYMBOL);
}
30
user3157184

Pour info: les cast ne cacheront pas l'avertissement par conception .

Quelque chose comme

return (id & MID_NUMBER) != 0;

devrait clairement indiquer "Je veux vérifier si cette valeur est nulle ou non" et laisser le compilateur être satisfait

53
Marco A.

Utilisez le !! idiome par exemple

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

Où est la déclaration d'identité et MID_NUMBER? Êtes-vous sûr qu'il ne s'agit pas de booléens de style windef plutôt que de booléens (en minuscules)? BOOL a été dans windef pendant des décennies typé comme un int; ils précèdent les booléens C++ appropriés et beaucoup de développeurs les utilisent encore.

1
Vman