uintptr_t データ型とは何ですか? 質問する

uintptr_t データ型とは何ですか? 質問する

それは何であり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。実装がなぜそうするのかはわかりませんが、標準では許可されています。

おすすめ記事