192

いくつかの C++ の例ではsize_t、単純なint. 違いは何ですか。なぜsize_t優れているのでしょうか。

4

5 に答える 5

162

フレンドリーなウィキペディアから:

stdlib.h および stddef.h ヘッダー ファイルは、オブジェクトのサイズを表すために使用されるsize_tというデータ型を定義します。サイズを受け取るライブラリ関数は、サイズが size_t 型であることを想定しており、sizeof 演算子は size_t に評価されます。

size_t の実際の型はプラットフォームに依存します。よくある間違いは、size_t が unsigned int と同じであると想定することです。これは、特に 64 ビット アーキテクチャがより一般的になるにつれて、プログラミング エラーにつながる可能性があります。

また、size_t が重要な理由を確認してください

于 2009-02-02T11:07:04.150 に答える
38

size_t は、サイズを表すために使用される型です (その名前が示すように)。そのプラットフォーム (および場合によっては実装) に依存するため、この目的にのみ使用する必要があります。明らかに、サイズを表す size_t は符号なしです。malloc、sizeof、およびさまざまな文字列操作関数を含む多くの stdlib 関数は、データ型として size_t を使用します。

int はデフォルトで署名され、そのサイズもプラットフォームに依存しますが、ほとんどの最新のマシンでは固定の 32 ビットになります (64 ビット アーキテクチャでは size_t は 64 ビットですが、これらのアーキテクチャでは int は 32 ビット長のままです)。

要約すると、オブジェクトのサイズを表すには size_t を使用し、それ以外の場合は int (または long) を使用します。

于 2009-02-02T11:48:12.677 に答える
9

これは、size_t が int 以外 (おそらく構造体) になる可能性があるためです。アイデアは、その仕事を基礎となる型から切り離すということです。

于 2009-02-02T11:06:29.563 に答える
-1

の定義は、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;
于 2016-05-24T16:27:26.090 に答える