いいえ、i
必ずしも値ではありません。結果は実装定義です。†</sup>
C ++でのポインターの表現は、nullポインターの表現を含め、実装によって定義されます。ゼロの整数値をポインターに割り当てるときは、そのポインターを実装定義のヌルポインター値に設定します。これは、必ずしもすべてビットゼロである必要はありません。その値を整数にキャストした結果は、推移性によって実装によって定義されます。
ただし、さらに厄介なのは、によって行われるマッピングがreinterpret_cast
とにかく実装定義されていることです。したがって、nullポインタ値がすべてビットゼロであったとしても、実装は自由に結果を自由に作成できます。キャストバックしたときに元の値が得られることが保証されているだけです。
とはいえ、引用の後の次の文には次のメモが含まれています。
[注:基礎となるマシンのアドレス指定構造を知っている人にとっては驚くことではありません。—エンドノート]
したがって、特定のマッピングは必要ありませんが、実際には、知識に基づいた推測を行うことができます。
†</sup>long
十分に大きいと仮定します。C ++ 0xではuintptr_t
、オプションでで定義されているを使用し<cstddef>
ます。