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