必須の標準引用符、強調鉱山:
5.2.19 キャストの再解釈
1/ [...] reinterpret_cast を使用して明示的に実行できる変換を以下に示します。reinterpret_cast を使用して他の変換を明示的に実行することはできません。
4/ ポインターは、それを保持するのに十分な大きさの任意の整数型に明示的に変換できます。[...]
5/ 整数型または列挙型の値は、明示的にポインターに変換できます。[...]
6/ 関数ポインターは、異なる型の関数ポインターに明示的に変換できます。[...]
7/ オブジェクト ポインターは、異なる型のオブジェクト ポインターに明示的に変換できます。[...]
8/ 関数ポインターからオブジェクト ポインター型への変換、またはその逆は、条件付きでサポートされています。[...]
9/ null ポインター値 (4.10) は、宛先型の null ポインター値に変換されます。[...]
10/ [...] 「T1 型の X のメンバーへのポインター」は [...] 「T2 型の Y のメンバーへのポインター」に明示的に変換できます [...]
11/ A [...] 型「T1 へのポインター」の式を reinterpret_cast を使用して「T2 へのポインター」型に明示的に変換できる場合、T1 を「T2 への参照」型にキャストできます。[...]
4/、5/、および 11/ に記載されている整数からポインターへの変換、および値から参照への変換を除いて、使用できる変換reinterpret_cast
はポインターからポインターへの変換のみです。
ただし、次の場合:
thing_pointer = reinterpret_cast<Thing*>(it);
it
ポインターではなく、オブジェクトです。このオブジェクトは、多くの点でポインターをエミュレートするように設計されていますが、それでもポインターではありません。