Gok*_*kul 1 c++ reinterpret-cast
我不知道为什么这个简单的代码不起作用.有人可以解释一下吗?
int main()
{
const char* c = "ret";
typedef unsigned char GOK_UINT8;
typedef GOK_UINT8* pGOK_UINT8;
const pGOK_UINT8 y = reinterpret_cast<const GOK_UINT8*>(c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有人能告诉我为什么reinterpret_cast应该不起作用?
谢谢,Gokul.
sbi*_*sbi 12
有人能告诉我为什么reinterpret_cast应该不起作用?
AFAICS,reinterpret_cast
应该可以正常工作,但之后的任务应该会导致错误.
这是因为a const GOK_UINT8*
是const
指向const
GOK_UINT8
对象的非指针,而a const pGOK_UINT8
是const
指向非const
对象的指针.
前者保护所引用的对象,后者指向对象.如果允许分配,则可以更改const GOK_UINT8*
要防止更改的对象.
请注意,typedef
ed指针表现得很奇怪.那是因为const
in(C因此也是in C++)的奇怪的声明语法:A const
保护它左边的东西,除非没有任何东西,然后它保护它的右边的东西.所以在in T const
和in中T const*
,类型的对象T
是受保护的,而在T* const
指向类型的对象的指针中T
是受保护的.如果你有
typedef T* TPtr;
Run Code Online (Sandbox Code Playgroud)
然后TPtr const
再次制作指针const
.那样做const TPtr
.一个typedef
编辑或者指针指向const
或非const
对象,你不能改变的.你不能把a填充const
到附近,TPtr
并期望保护指针指向的对象.
(顺便说一下,这就是为什么STL类必须同时定义a iterator
和a const_iterator
.)