私はfoo
がnullptr
であるか否かを確認していた場合は、暗黙のキャストはBOOLする
Foo* foo = nullptr;
を持って、私は
if (!foo)
を書き込みを許可または私は
if (foo == nullptr)
を書くべきだと仮定
私はfoo
がnullptr
であるか否かを確認していた場合は、暗黙のキャストはBOOLする
Foo* foo = nullptr;
を持って、私は
if (!foo)
を書き込みを許可または私は
if (foo == nullptr)
を書くべきだと仮定
この標準的な参照先(太字強調):
のC++ 11§4.12ブール変換
メンバー型に算術、スコープ外の列挙、ポインタ、またはポインタのprvalueはbool型のprvalueに変換することができます。 ゼロ値、 ヌルポインタ値、またはnullメンバポインタ値が falseに変換されました。他の値はすべてtrueに変換されます。 std :: nullptr_tのprvalueは、bool型のprvalueに変換できます。 結果の値はfalseです。
真ん中の文が関連している:NULLポインタ値が(foo = nullptr
)が暗黙のうちに自身がbool
型を持つfalse
にキャストできることを語っています。したがって、if (!foo)
は明確に定義されています。 C++、ヌルポインタで
が
として定義されるNULLポインタ定数は整数定数式(5.19)がゼロに評価整数型の 右辺値です。なぜ、
Foo* foo = nullptr;
だ
は次のようである:Cでさらに
Foo* foo = 0;
、++ゼロ(0)false
としてブール値を数えます。したがって、if (foo == nullptr)
の文は有効で、if (!foo)
と同じです。
どちらも問題なく、コーディングスタイルの問題です。既存のコードのスタイルに従うか、それがあなたにとってより明確なコードを使用するかどうかを判断してください。 –