[英]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;
}
有人能告訴我為什么reinterpret_cast
不起作用嗎?
有人能告訴我為什么 reinterpret_cast 不起作用嗎?
AFAICS, reinterpret_cast
應該可以正常工作,但是之后的分配應該會導致錯誤。
那是因為const GOK_UINT8*
是指向const
GOK_UINT8
對象的非const
指針,而const pGOK_UINT8
是指向非const
對象的const
指針。
前者保護引用的對象,后者保護引用對象的指針。 如果允許分配,則可以更改const GOK_UINT8*
旨在防止更改的對象。
請注意, typedef
ed 指針的行為方式很奇怪。 那是因為在(C,因此也在)C++ 中const
的奇怪聲明語法: const
保護它左邊的東西,除非沒有任何東西,然后它保護它右邊的東西。 所以在T const
和T const*
, T
類型的對象是受保護的,而在T* const
,指向T
類型對象的指針是受保護的。 如果你有
typedef T* TPtr;
然后TPtr const
再次使指針const
。 const TPtr
。 typedef
ed 指針指向const
或非const
對象,你不能改變它。 你不能在TPtr
附近填充一個const
並期望它保護指針所指的對象。
(順便說一句,這就是為什么 STL 類必須同時定義iterator
和const_iterator
。)
是的 sbi 是正確的。
相應地修改了您的代碼,
const char* c = "ret";
typedef unsigned char GOK_UINT8;
typedef const GOK_UINT8* pGOK_UINT8;
pGOK_UINT8 y = reinterpret_cast<const GOK_UINT8*>(c);
printf("%s", y);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.