[英]Understanding void* against intptr_t and uintptr_t
intptr_t
和uintptr_t
的目的是在某些應用程序中,實際上你需要對指針值進行某種數值計算,可能是通過翻轉單個位,也許是通過對它們進行異或運算等。在這些情況下,當你需要使用時指針的數值 , intptr_t
和uintptr_t
是整數類型(如果它們存在)保證足夠大以容納任何指針。 例如, int
不是這樣,因為未指定int
相對於指針大小的大小。
因為進行這些轉換從根本上說是不安全的,所以C ++要求你使用reinterpret_cast
來轉換intptr_t
和uintptr_t
以及指針類型。
如果你正在做的就是存儲“指向某個東西的指針”,並且只要指針不是函數指針或成員函數指針,你就可以將它轉換為void*
。 該演員陣容保證有效,從void*
轉換回原始類型只需要static_cast
並保證安全。
intptr_t
和uintptr_t
的大小不是避免它們的好理由。 它們僅適用於不同的應用。 如果需要對指針進行數值計算,請使用這些類型。 否則,如果您只需要存儲“指向某個東西的指針”,請使用void*
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.