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