2015-11-02 11 views
8

私はfoonullptrであるか否かを確認していた場合は、暗黙のキャストはBOOLする

Foo* foo = nullptr;を持って、私は

if (!foo) 

を書き込みを許可または私は

if (foo == nullptr) 
を書くべきだと仮定
+0

どちらも問題なく、コーディングスタイルの問題です。既存のコードのスタイルに従うか、それがあなたにとってより明確なコードを使用するかどうかを判断してください。 –

答えて

15

この標準的な参照先(太字強調):

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++、ヌルポインタで

2

として定義されるNULLポインタ定数は整数定数式(5.19)がゼロに評価整数型の 右辺値です。なぜ、

Foo* foo = nullptr; 

は次のようである:Cでさらに

Foo* foo = 0; 

、++ゼロ(0)falseとしてブール値を数えます。したがって、if (foo == nullptr)の文は有効で、if (!foo)と同じです。

-1
if (!foo) 

これは問題なく動作します。

if (foo == nullptr) 

これは、コードを読んでいる人にとっては明らかです。

+3

これは主観的です。 – emlai

関連する問題