4

コンパイラの動作の観点から奇妙なことに気づきました。ブール値をに割り当てることができます* char

char * k= false;

なんで?しかし、代入後*charはまだ初期化されていません。intコンパイラが値の割り当てを許可しないのはなぜですか?

4

4 に答える 4

5

falseブール値を値0の整数に暗黙的に変換し、NULLポインターを宣言します。事実上、

char* k = 0;

これは有効な構文です

于 2012-10-24T08:19:32.413 に答える
2

C ++ 03標準、#4.10:

ヌルポインタ定数は、ゼロと評価される整数型の整数定数式(5.19)の右辺値です。

5.19:

積分定数式には、リテラル(2.13)、列挙子、定数式(8.5)で初期化された積分型または列挙型の静的データ・メンバー、積分型または列挙型の非型テンプレート・パラメーター、および式のサイズのみを含めることができます。 。

falseはブールリテラルであるため、定数式のカテゴリに分類されるため、nullポインタ定数として修飾できます。

于 2012-10-24T08:53:13.093 に答える
0

falseおよびはとのtrueショートカットです。ポインタには、whichを使用します。したがって、構文は正しいです。01NULLdefine NULL 0

于 2012-10-24T08:23:19.163 に答える
0

C++ ではおよび とfalse同じであるため、コンパイラはそれを許可します。0NULL

個人的には、少なくとも割り当てについてNULLは、null ポインターを示すために使用する方が理解しやすく、より正確だと思います。

ところで、C++ より前は、一部のシステムでは、実際には;NULLとして定義されたマクロでした。その背景については、この回答(void*)0xffffで確認できます。

于 2012-10-24T08:33:29.850 に答える