いくつかの C++ の例ではsize_t
、単純なint
. 違いは何ですか。なぜsize_t
優れているのでしょうか。
5 に答える
stdlib.h および stddef.h ヘッダー ファイルは、オブジェクトのサイズを表すために使用されるsize_tというデータ型を定義します。サイズを受け取るライブラリ関数は、サイズが size_t 型であることを想定しており、sizeof 演算子は size_t に評価されます。
size_t の実際の型はプラットフォームに依存します。よくある間違いは、size_t が unsigned int と同じであると想定することです。これは、特に 64 ビット アーキテクチャがより一般的になるにつれて、プログラミング エラーにつながる可能性があります。
size_t は、サイズを表すために使用される型です (その名前が示すように)。そのプラットフォーム (および場合によっては実装) に依存するため、この目的にのみ使用する必要があります。明らかに、サイズを表す size_t は符号なしです。malloc、sizeof、およびさまざまな文字列操作関数を含む多くの stdlib 関数は、データ型として size_t を使用します。
int はデフォルトで署名され、そのサイズもプラットフォームに依存しますが、ほとんどの最新のマシンでは固定の 32 ビットになります (64 ビット アーキテクチャでは size_t は 64 ビットですが、これらのアーキテクチャでは int は 32 ビット長のままです)。
要約すると、オブジェクトのサイズを表すには size_t を使用し、それ以外の場合は int (または long) を使用します。
これは、size_t が int 以外 (おそらく構造体) になる可能性があるためです。アイデアは、その仕事を基礎となる型から切り離すということです。
の定義は、https SIZE_T
:
//msdn.microsoft.com/en-us/library/cc441980.aspxおよびhttps://msdn.microsoft.com/en-us/library/cc230394.aspxにあります。
ここに必要な情報を貼り付けます。
SIZE_T
ポインタがULONG_PTR
指すことができる最大バイト数を表す です。
この型は次のように宣言されます。
typedef ULONG_PTR SIZE_T;
AULONG_PTR
は、ポインターの精度に使用される unsigned long 型です。ポインター演算を実行するためにポインターを long 型にキャストするときに使用されます。
この型は次のように宣言されます。
typedef unsigned __int3264 ULONG_PTR;