プログラミング言語Cの次期仕様C2x(C23)にて、ついにC言語にも真のヌルポインタ定数nullptr
がやってくる。
C++11(→id:yohhoy:20120503)から遅れること12年。
int *p1 = nullptr; // C2x以降 int *p2 = NULL; int *p3 = 0;
まとめ:
- C/C++両言語の
nullptr
がセマンティクス一致するよう設計されている。 - 事前定義定数*1
nullptr
は、専用のnullptr_t
型が取りうる唯一の値。- 定数
nullptr
はいつでも利用可能(ヘッダinclude不要)。 nullptr_t
型は標準ヘッダ <stddef.h> で定義される。*2
- 定数
- C2xで追加される
nullptr
のほか、現行の整数定数値0
やマクロNULL
をいずれもヌルポインタ定数(null pointer constant)として扱う。- C++同様に長期的には
nullptr
への移行が推奨される。(→id:yohhoy:20120506)
- C++同様に長期的には
nullptr_t
型はvoid*
型と同じサイズ/アライメントを持ち、nullptr
と(void*)0
の内部表現は等しい。- 可変引数リストに対する番兵(sentinel)実引数として、
nullptr
はNULL
よりもポータブルに使える。(→id:yohhoy:20160224)
- 可変引数リストに対する番兵(sentinel)実引数として、
関連URL
*1:predefined constants はC2xにて新たに導入される構文要素。false, true, nulllptr の3種類が追加される。false/true については C言語のbool型とその名前について 〜もう_Boolは嫌だ〜 を参照。
*2:C2xで導入される typeof_unqual を利用して typedef typeof_unqual(nullptr) nullptr_t; と定義される。