は、我々は変数aを持っているとしましょう:"!" "== 0"のintseadはintが0の良い練習であるかどうかをチェックする?
は、それが代わりに
if(a == 0)
{
// do some stuff
}
の
if(!a)
{
// do some stuff
}
を行うには大丈夫ですか?それは働くので。
最初の例では、intはboolに変換されるため、static_cast<bool>(a)
を指定しないでも問題ありませんか? a
が1より大きい場合はどうなりますか?
_ "いいえ、 ' if(!a) '" _確かめてください。 –
技術的には、すべての条件節は 'if' /' while'/etcなどです。 'bool'は必要ありません。それらは整数値に変換可能でなければなりません。そして、値がゼロに等しいなら、それは偽として扱われ、そうでなければ真です。しかし、私は個人的には、読みやすさのために 'if(a == 0)'を好む。また、「良い実践」についての質問は、常に意見に基づいている。 –
確かにそれはうまく動作し、標準によってよく定義されています - intからboolへの変換があり、0が偽であるとみなされ、非ゼロが真となる。しかし、あなたが読んでいる他の人間(将来自分自身を含む)のコードを書いていることを忘れないでください。 'if(a == 0)'を書くことは、より明示的な意図の記述です。経験豊富なプログラマーは 'if(!a)'を同じように正しく解釈しますが、この質問をしたという事実は、あなたのステートメントがあなたの上位レベルの意図を反映していないときにどのように問題になるかを強調します。 – Andrew