C++11からは、ポインタへのNULLのセットは、nullptrを使うことが推奨されている。
nullptr - cpprefjp C++日本語リファレンス
nullptr.cppで、
intとconst char *を引数とするfuncがある。
値、指定された文字列をそれぞれ出力するだけ。
// 0とNULLの場合. func(0); // 0を出力. func(NULL); // NULLを出力.(この環境では, 呼び出しが曖昧ということでコンパイルエラーになった.) func(nullptr); // C++11ではnullptrを推奨.
こうすると、
$ vi nullptr.cpp
$ g++ nullptr.cpp -o nullptr -std=c++11
nullptr.cpp: 関数 ‘int main()’ 内:
nullptr.cpp:20:12: エラー: オーバーロードされている ‘func(NULL)’ の呼び出しが曖昧です
func(NULL); // NULLを出力.(この環境では, 呼び出しが曖昧ということでコンパイルエラーになった.)
^
nullptr.cpp:5:6: 備考: candidate: void func(int)
void func(int val); // オーバーロード関数func(int val)
^~~~
nullptr.cpp:6:6: 備考: candidate: void func(const char*)
void func(const char *ptr); // オーバーロード関数func(const char *ptr)
^~~~
$ このように曖昧なのでコンパイルエラー。
こうすると、
$ vi nullptr.cpp $ g++ nullptr.cpp -o nullptr -std=c++11 $ ./nullptr val = 10 ptr = ABC
だったり、
val = 0 ptr = $
だったり、コンパイルして実行できる。
Sample/cpp/nullptr/nullptr/src/nullptr at master · bg1bgst333/Sample · GitHub