プログラミング言語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; と定義される。