reinterpret_cast が機能しない理由を教えてもらえますか?
AFAICS、reinterpret_cast
問題なく動作するはずですが、その後の割り当てでエラーが発生するはずです。
これconst GOK_UINT8*
は、 a がオブジェクトへの非const
ポインターconst
GOK_UINT8
であるのに対し、 aconst pGOK_UINT8
はconst
非const
オブジェクトへのポインターであるためです。
前者は参照されるオブジェクトを保護し、後者はオブジェクトを参照するポインタを保護します。割り当てが許可される場合は、変更const GOK_UINT8*
から保護することを意図したオブジェクトを変更できます。
typedef
そのように ed ポインターが奇妙な動作をすることに注意してください。これは、const
in (C および in) C++の奇妙な宣言構文によるものです。Aconst
は、何もない限り左側のものを保護し、次に右側のものを保護します。したがって、T const
および ではT const*
、型のオブジェクトT
は保護されT* const
ていますが、型のオブジェクトへのポインターでT
は保護されています。あなたが持っている場合
typedef T* TPtr;
次にTPtr const
再びポインターを作成しますconst
。そうconst TPtr
です。ed ポインターは、オブジェクトまたは非オブジェクトtypedef
を指しており、それを変更することはできません。の近くに a を詰め込み、ポインターが参照するオブジェクトを保護することを期待することはできません。const
const
const
TPtr
iterator
(ところで、これが STL クラスが anと a の両方を定義しなければならない理由const_iterator
です。)