size_t
とstd::size_t
の違いは、それらが宣言されている場所、使用するタイミング、および他の差別化機能に関してどのようなものですか?
Cのsize_t
とC++のstd::size_t
は両方とも同じです。
Cでは<stddef.h>
で定義され、C++では<cstddef>
で定義され、その内容はCヘッダーと同じです(以下の引用を参照)。その定義はの符号なし整数型のresultの sizeof演算子。
C Standardは、§17.7/ 2で、
size_tは、の符号なし整数型のresultのsizeof演算子
そして、C++ Standardは、§18.1/ 3で(about cstddef
header)と述べています。
内容は標準Cライブラリヘッダーと同じですが、次の変更があります。
そう、両方とも同じです。 唯一の違いは、C++がstd
名前空間にsize_t
を定義していることです。
また、上記の行には「次の変更あり」があり、size_t
を参照していないことにも注意してください。むしろ、同じヘッダーで定義されている言語(Cには存在しない)にC++によって行われた(主に)新しい追加を指します。
ウィキペディアには、size_tの範囲とストレージサイズに関する非常に優れた情報があります。
size_tの範囲とストレージサイズ
Size_tのactualタイプは、platform-dependent; よくある間違いは、size_tがunsigned intと同じであると仮定することです。これは、プログラミングエラーを引き起こす可能性があります。たとえば、64ビットアーキテクチャ。
1999 ISO C標準(C99)によると、size_tは少なくとも16ビットの符号なし整数型です。
そして、残りはウィキペディアの このページ から読むことができます。
C++ 03「17.4.3.1.4タイプ」から:
標準Cライブラリ(脚注169)の各タイプTについて、タイプ:: Tおよびstd :: Tは実装用に予約されており、定義されている場合、:: Tはstd :: Tと同一です。
脚注169:
これらのタイプは、clock_t、div_t、FILE、fpos_t、lconv、ldiv_t、mbstate_t、ptrdiff_t、sig_atomic_t、size_t、time_t、tm、va_list、wctrans_t、wctype_t、およびwint_tです。
std :: size_tは実際にはstddef.hのsize_tです。
cstddefは以下を提供します:
#include <stddef.h>
namespace std
{
using ::ptrdiff_t;
using ::size_t;
}
...前の定義をstd名前空間に効果的に持ち込む。