web-dev-qa-db-ja.com

警告C4800: 'int':値をboolに強制的に 'true'または 'false'(パフォーマンス警告)

私のコードにはこの問題があります:

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

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

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

参考:キャストは警告を非表示にしません 設計上

何かのようなもの

return (id & MID_NUMBER) != 0;

「この値がゼロかどうかを確認したい」と明確に述べ、コンパイラに満足させます

53
Marco A.

使用 !!イディオム例

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

IdとMID_NUMBERの宣言はどこにありますか? (小文字の)ブール型ではなく、ウィンデフスタイルのブール型ではありませんか? BOOLは、intとしてtypedefされた何十年もwindefにあります。それらは適切なC++ブールよりも前のものであり、多くの開発者がまだそれらを使用しています。

1
Vman