コンパイラの動作の観点から奇妙なことに気づきました。ブール値をに割り当てることができます* char
。
char * k= false;
なんで?しかし、代入後*charはまだ初期化されていません。int
コンパイラが値の割り当てを許可しないのはなぜですか?
コンパイラの動作の観点から奇妙なことに気づきました。ブール値をに割り当てることができます* char
。
char * k= false;
なんで?しかし、代入後*charはまだ初期化されていません。int
コンパイラが値の割り当てを許可しないのはなぜですか?
false
ブール値を値0の整数に暗黙的に変換し、NULLポインターを宣言します。事実上、
char* k = 0;
これは有効な構文です
C ++ 03標準、#4.10:
ヌルポインタ定数は、ゼロと評価される整数型の整数定数式(5.19)の右辺値です。
5.19:
積分定数式には、リテラル(2.13)、列挙子、定数式(8.5)で初期化された積分型または列挙型の静的データ・メンバー、積分型または列挙型の非型テンプレート・パラメーター、および式のサイズのみを含めることができます。 。
false
はブールリテラルであるため、定数式のカテゴリに分類されるため、nullポインタ定数として修飾できます。
false
およびはとのtrue
ショートカットです。ポインタには、whichを使用します。したがって、構文は正しいです。0
1
NULL
define NULL 0
C++ ではおよび とfalse
同じであるため、コンパイラはそれを許可します。0
NULL
個人的には、少なくとも割り当てについてNULL
は、null ポインターを示すために使用する方が理解しやすく、より正確だと思います。
ところで、C++ より前は、一部のシステムでは、実際には;NULL
として定義されたマクロでした。その背景については、この回答(void*)0xffff
で確認できます。