それは何でありuintptr_t
、何に使用できますか?
ベストアンサー1
まず、質問があった時点では、uintptr_t
は C++ にはありませんでした。 C99 では、 に<stdint.h>
オプションの型として存在します。 多くの C++03 コンパイラでは、そのファイルを提供しています。 また、 C++11 では、 に存在しますが<cstdint>
、ここでもオプションであり、定義については C99 を参照しています。
C99 では、「void への有効なポインターをこの型に変換し、その後 void へのポインターに戻すことができ、結果が元のポインターと等しくなるという特性を持つ符号なし整数型」として定義されています。
これをそのまま意味するものとして受け取ってください。サイズについては何も書かれていません。
uintptr_t
は と同じサイズかもしれませんvoid*
。 より大きいかもしれません。 おそらく より小さくなるでしょうが、そのような C++ 実装は異常に近づきます。 たとえば、 がvoid*
32 ビットであるが、仮想アドレス空間の 24 ビットしか使用されていない仮想プラットフォームでは、要件を満たす 24 ビットを持つことができますuintptr_t
。実装がなぜそうするのかはわかりませんが、標準では許可されています。