Может кто-нибудь сказать мне, почему reinterpret_cast не должен работать?
AFAICS, reinterpret_cast
должно работать нормально, но последующее назначение должно вызвать ошибку.
Это потому, что const GOK_UINT8*
- это не const
указатель на const
GOK_UINT8
объектов, в то время как const pGOK_UINT8
является const
указателем на не const
объектов.
Первый защищает указанный объект, второй - указатель на этот объект. Если назначение будет разрешено, вы можете изменить объект, который const GOK_UINT8*
предназначен для защиты от изменения.
Обратите внимание, что typedef
ed указатели ведут себя странно таким образом. Это происходит из-за странного синтаксиса объявления const
в (C и, следовательно, также в) C ++: A const
защищает объект слева, если ничего нет, то он защищает объект справа . Таким образом, в T const
и в T const*
объект типа T
защищен, а в T* const
указатель на объект типа T
защищен. Если у вас есть
typedef T* TPtr;
затем TPtr const
снова делает указатель const
. Так же const TPtr
. typedef
ed указатель указывает либо на const
, либо на не const
объекты, вы не можете это изменить. Вы не можете вставить const
в окрестности TPtr
и ожидать, что для защиты объектов, на которые ссылается указатель.
(Кстати, именно поэтому классы STL должны определять iterator
и const_iterator
.)