有人能告诉我为什么 reinterpret_cast 不应该工作吗?
AFAICS,reinterpret_cast应该可以正常工作,但是之后的分配应该会导致错误。
这是因为 aconst GOK_UINT8*是指向对象的非const指针const GOK_UINT8,而 aconst pGOK_UINT8是const指向非const对象的指针。
前者保护引用的对象,后者保护引用对象的指针。如果允许分配,则可以更改const GOK_UINT8*要防止更改的对象。
请注意,typedefed 指针的行为很奇怪。这是因为const(C 和)C++ 中奇怪的声明语法:Aconst保护它左边的东西,除非没有任何东西,然后它保护它右边的东西。因此 inT const和 in 中T const*,类型的对象T是受保护的,而在T* const指向类型对象的指针中T是受保护的。如果你有
typedef T* TPtr;
然后TPtr const再次使指针const。也是如此const TPtr。typedefed 指针要么指向对象,要么指向const非const对象,您无法更改它。您不能将 aconst塞入附近TPtr并期望它保护指针所指的对象。
(顺便说一句,这就是 STL 类必须同时定义 aniterator和 a 的原因const_iterator。)