簡體   English   中英

了解void *對intptr_t和uintptr_t

[英]Understanding void* against intptr_t and uintptr_t

這是我正在測試的代碼:

int value = 0;
void* addyvoid = static_cast<void*>(&value); // C++-style cast.

它工作得很好,但我可以使用uintptr_t / intptr_t 但是,正如人們在這里所說的那樣因為它們太大了,所以它們不適合拿指針。 那么,這是真的嗎? 但是,如果是,使用void*保持指針會更好,但會丟失數據嗎?

intptr_tuintptr_t的目的是在某些應用程序中,實際上你需要對指針值進行某種數值計算,可能是通過翻轉單個位,也許是通過對它們進行異或運算等。在這些情況下,當你需要使用時指針的數值intptr_tuintptr_t是整數類型(如果它們存在)保證足夠大以容納任何指針。 例如, int不是這樣,因為未指定int相對於指針大小的大小。

因為進行這些轉換從根本上說是不安全的,所以C ++要求你使用reinterpret_cast來轉換intptr_tuintptr_t以及指針類型。

如果你正在做的就是存儲“指向某個東西的指針”,並且只要指針不是函數指針或成員函數指針,你就可以將它轉換為void* 該演員陣容保證有效,從void*轉換回原始類型只需要static_cast並保證安全。

intptr_tuintptr_t的大小不是避免它們的好理由。 它們僅適用於不同的應用。 如果需要對指針進行數值計算,請使用這些類型。 否則,如果您只需要存儲“指向某個東西的指針”,請使用void*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM