nullptr キーワードとは何ですか? また、なぜ NULL よりも優れているのですか? 質問する

nullptr キーワードとは何ですか? また、なぜ NULL よりも優れているのですか? 質問する

現在、多くの新機能を備えた C++11 がリリースされています。興味深くも混乱を招く機能 (少なくとも私にとっては) は、新しい ですnullptr

まあ、厄介なマクロはもう必要ありませんNULL

int* x = nullptr;
myclass* obj = nullptr;

それでも、どのように機能するのかわかりませんnullptr。例えば、ウィキペディアの記事言う:

C++11では、区別されたヌル ポインター定数として機能する新しいキーワードnullptr を導入することでこれを修正しています。これはnullptr_t 型であり、暗黙的に変換可能であり、任意のポインター型またはメンバーへのポインター型と比較できます。bool を除き、整数型とは暗黙的に変換または比較できません。

キーワードと型のインスタンスはどのようになっているのでしょうか?

nullptrまた、古き良き よりも が優れている別の例 (Wikipedia のもの以外) はありますか0?

ベストアンサー1

キーワードと型のインスタンスはどのようになっているのでしょうか?

これは驚くことではありません。trueと は両方ともfalseキーワードであり、リテラルとしては型 ( bool) を持ちます。は型 のポインターリテラルnullptrであり、prvalue です ( を使用してそのアドレスを取得することはできません)。std::nullptr_t&

  • 4.10ポインタ変換について、 型の prvalue はstd::nullptr_tヌル ポインタ定数であり、整数のヌル ポインタ定数は に変換できるとされていますstd::nullptr_t。逆方向は許可されていません。これにより、ポインタと整数の両方に対して関数をオーバーロードし、 を渡してnullptrポインタ バージョンを選択できます。NULLまたはを渡すと、0のバージョンが紛らわしく選択されますint

  • nullptr_tを整数型にキャストするには が必要であり、を整数型にreinterpret_castキャストする場合と同じセマンティクスを持ちます(マッピング実装は定義済み)。 はどのポインタ型にも変換できません。可能であれば暗黙的な変換に依存するか、 を使用してください。(void*)0reinterpret_castnullptr_tstatic_cast

  • 規格では、 でsizeof(nullptr_t)あることが要求されていますsizeof(void*)

おすすめ記事