ブログ@kaorun55

HoloLensやKinectなどのDepthセンサーを中心に書いています。

NULL と 0

C++ でプログラムを書くときにポインタの初期化は NULL ではなく、0 でおこなっている。
C 言語と C++ で NULL の定義が違うのと*1、どこかで(ソース不明) 0 のほうがいいよ、と見た気がするから。


なんだけど、どうも調べてみるとそうでもなくて、NULL が 0 ではない環境もあるらしい。
C 言語に関しては 「ポインタを代入すべきところに 0 が入っていたら、コンパイル時にヌルポインタに置き換える」という規格があるらしいので、もしかしたら問題ないのかもしれないけど、どうにも気持ち悪い。


C++0x では "nullptr" がキーワードで追加されるようなので、早いとこ対応してほしいなぁ。。。
と思ったり。
C++ の JIS 規格を少し読んでみたけど、紙だと調べたいことを探しにくい^^;

追記

JIS C++ の「4.10 ポインタ変換」を見ると、ゼロ代入でオッケーらしい雰囲気があるなぁ。

ゼロと評価される右辺値をもつ整数型の汎用整数定数式(5.19)を、空ポインタ定数と呼ぶ。空ポインタ定数は、ポインタ型に変換することができる。その結果は、その型の空ポインタ値となる。

*1:C 言語は "#define NULL ((void *)0)"、C++ は "#define NULL 0"