私は質問への回答を投稿していました - そして、金属という名前の別のポスターのおかげで、それが私に起こったとコメントしました
C++ コンパイラはこれを許可しました:
int *p = 0;
しかし、これではありませんint *p = 1
。0
特別な番号と見なされますか?
編集:@DavidHeffermanは言ったIs 0 special? In the context of a pointer, yes it is.
-なぜですか?
私は質問への回答を投稿していました - そして、金属という名前の別のポスターのおかげで、それが私に起こったとコメントしました
C++ コンパイラはこれを許可しました:
int *p = 0;
しかし、これではありませんint *p = 1
。0
特別な番号と見なされますか?
編集:@DavidHeffermanは言ったIs 0 special? In the context of a pointer, yes it is.
-なぜですか?
標準のセクション 4.10、ポインター変換 [conv.ptr] は次のように述べています。
null ポインター定数は、0 に評価される整数型の整数定数式 (5.19) prvalue、または型 std::nullptr_t の prvalue です。null ポインター定数はポインター型に変換できます。結果はその型の null ポインター値であり、オブジェクトへのポインターまたは関数型へのポインターの他のすべての値と区別できます。このような変換をヌルポインタ変換と呼びます。同じ型の 2 つのヌル ポインター値は、比較すると等しくなります。null ポインター定数から cv 修飾型へのポインターへの変換は単一の変換であり、ポインター変換とそれに続く修飾変換 (4.4) のシーケンスではありません。整数型の null ポインター定数は、std::nullptr_t 型の prvalue に変換できます。
はい、0
ポインターのコンテキストでは特別な値です。
0 は NULL、1 は無効なアドレスです。
「ヌルポインター定数は、ゼロに評価される整数定数式です (0 や 0L など)。」