1. ホーム
  2. c++

[解決済み] nullptrを使用する利点は何ですか?

2022-04-23 21:49:42

質問

このコードの一部 概念的に は、3つのポインタに対して同じことをします(安全なポインタの初期化)。

int* p1 = nullptr;
int* p2 = NULL;
int* p3 = 0;

で、ポインターを割り当てることのメリットは何かというと nullptr に値を割り当てるよりも NULL または 0 ?

解決方法は?

このコードでは、利点がないように見えます。しかし、次のようなオーバーロードされた関数を考えてみてください。

void f(char const *ptr);
void f(int v);

f(NULL);  //which function will be called?

どの関数が呼び出されるのでしょうか?もちろん、ここで意図しているのは f(char const *) しかし、実際には f(int) が呼び出されます! これは大問題です 1 ということでしょうか?

そこで、このような問題を解決するために nullptr :

f(nullptr); //first function is called


もちろん、それだけが利点ではありません。 nullptr . もうひとつご紹介しましょう。

template<typename T, T *ptr>
struct something{};                     //primary template

template<>
struct something<nullptr_t, nullptr>{};  //partial specialization for nullptr

テンプレートでは nullptr として推論されます。 nullptr_t ということで、こう書くことができます。

template<typename T>
void f(T *ptr);   //function to handle non-nullptr argument

void f(nullptr_t); //an overload to handle nullptr argument!!!


1. C++の場合。 NULL は次のように定義されます。 #define NULL 0 ということで、基本的には int ということです。 f(int) が呼び出されます。