這是我的測試代碼:瞭解無效*反對使用intptr_t和uintptr_t
int value = 0;
void* addyvoid = static_cast<void*>(&value); // C++-style cast.
它完美的作品,但我可以用uintptr_t
/intptr_t
。但是因爲人們說here太大,所以他們不太擅長控球。那麼,這是真的嗎?但是,如果是,拿着指針使用void*
會更好,但會有數據丟失嗎?
這是我的測試代碼:瞭解無效*反對使用intptr_t和uintptr_t
int value = 0;
void* addyvoid = static_cast<void*>(&value); // C++-style cast.
它完美的作品,但我可以用uintptr_t
/intptr_t
。但是因爲人們說here太大,所以他們不太擅長控球。那麼,這是真的嗎?但是,如果是,拿着指針使用void*
會更好,但會有數據丟失嗎?
的intptr_t
和uintptr_t
的目的是,在某些應用中,你其實需要做某種數值計算對指針值,也許通過翻轉個別位,也許他們XORing等。在這種情況下,你的時候需要使用數字指針的值,intptr_t
和uintptr_t
是整數類型(如果它們存在)保證足夠大以容納任何指針。例如int
的情況並非如此,因爲沒有指定相對於指針大小的int
的大小。
由於這些轉換基本上是不安全的,因此C++要求您使用reinterpret_cast
來轉換和從intptr_t
和uintptr_t
和指針類型。
如果您所做的只是存儲「指向某個東西的指針」,並且假定該指針不是函數指針或成員函數指針,則可以將其轉換爲void*
。該演員陣容保證工作,從void*
回到原來的類型只需要static_cast
,並保證是安全的。
intptr_t
和uintptr_t
的大小不是避免它們的好理由。他們只是爲了不同的應用程序。如果您需要對指針進行數字計算,請使用這些類型。否則,如果您只需要存儲「指向某個東西的指針」,請使用void*
。
除非將其更改爲'reinterpret_cast',否則不能使用'uintptr_t' /'intptr_t',否則它將保留所需的數據 –