ポインタがあるとします:int *pointer
ポインタのNULL可能性をチェックする:!pointerまたはpointer == nullptr?
私はそのNULL値の許容をテストしたい場合は、私がそれを行う必要があります。
bool nullability = !pointer;
かと:
bool nullability = (pointer == nullptr);
は同等の両方の式はありますか? そうでない場合は、なぜ、どのような副作用ですか?
ポインタがあるとします:int *pointer
ポインタのNULL可能性をチェックする:!pointerまたはpointer == nullptr?
私はそのNULL値の許容をテストしたい場合は、私がそれを行う必要があります。
bool nullability = !pointer;
かと:
bool nullability = (pointer == nullptr);
は同等の両方の式はありますか? そうでない場合は、なぜ、どのような副作用ですか?
nullptr
はブール値に変換されたときにfalse
に変換されることが保証されているため、どちらも等価です。 N4296から
:
4.12ブール変換
メンバー型に算術、スコープ外の列挙、ポインタ、またはポインタのprvalueはbool型のprvalueに を変換することができます。ゼロ値、ヌルポインタ値 またはヌルメンバポインタ値はfalseに変換されます。その他の値は がtrueに変換されます。直接初期化(8.5)の場合、 std :: nullptr_tのPR値をbool型のprvalueに変換できます。 結果の値はfalseです。
2つの構文を標準によると、この答え(Implicit cast of null pointer to bool)と同じ動作
はいくつかのアイデアは、ここを参照してくださいしているhttp://stackoverflow.com/a/17774781/133203 –