null ポインター値nullptr
へのポインターを初期化するときに常に使用します。これは、ドラフト n3485によると、それが意図されていることです。
[lex.nullptr] 段落 1
ポインタ リテラルはキーワード nullptr です。これは std::nullptr_t 型の prvalue です。[ 注: std::nullptr_t は、ポインター型でもメンバー型へのポインターでもない特殊な型です。むしろ、この型の prvalue はヌル ポインター定数であり、ヌル ポインター値またはヌル メンバー ポインター値に変換できます。[...] — エンドノート]
の使用に移りましょうNULL
。
同案によれば、次のように定義される。
[diff.null] パラグラフ 1
マクロ NULL, [...] は、
この国際標準における実装定義の C++ ヌル ポインター定数です。
ヌルポインタ定数は次のとおりです。
[conv.ptr] パラグラフ 1
null ポインター定数は、整数型の定数式 [...] 0 に評価される整数型の prvalue または型 std::nullptr_t の prvalue です。
つまり、 がゼロに評価される整数の prvalue として定義されているか、タイプ の prvalue として定義されているかは、実装定義の動作です。標準ライブラリの指定された実装が前者を選択した場合、整数型に割り当てることができ、ゼロに設定されることが保証されますが、後者が選択された場合、コンパイラはエラーを発行してプログラムを異常と宣言することができます-形成された。NULL
std::nullptr_t
NULL
言い換えれば、条件付きで有効ですが [ IB を読む] を使用して整数を初期化することNULL
はおそらく悪い考えです。代わりに 0 を使用してください。
一方、上記によれば、ポインターをヌルポインター値にNULL
初期化することが保証されていますが、これはマクロであり、いくつかの注意事項があり、型チェックと変換規則が適用される特定の型の prvalue です。 . それが主に優先される理由です。nullptr
NULL
nullptr
nullptr