それらが宣言されている場所、それらをいつ使用すべきか、およびその他の差別化機能の違いは何size_t
ですか?std::size_t
3 に答える
Csize_t
とC++std::size_t
はどちらも同じです。
<stddef.h>
Cでは、C ++で定義されており、その<cstddef>
内容はCヘッダーと同じです(以下の引用を参照)。sizeof演算子の結果の符号なし整数型として定義されています。
C標準は§17.7/2で述べています、
sizeof演算子の結果の符号なし整数型であるsize_t
そして、C++標準はcstddef
§18.1/3で(ヘッダーについて)言っています、
内容は標準Cライブラリヘッダーと同じですが、以下の変更があります。
そうですね、どちらも同じです。唯一の違いは、C++が名前空間で定義size_t
することです。std
また、上記の行には、を参照していない「次の変更を加えた」と記載されていることにも注意してくださいsize_t
。それはむしろ、同じヘッダーで定義されている言語(Cには存在しない)へのC ++によって(ほとんど)行われた新しい追加を指します。
ウィキペディアには、size_tの範囲とストレージサイズに関する非常に優れた情報があります。
size_tの範囲とストレージサイズ
size_t の実際のタイプは、プラットフォームによって異なります。よくある間違いは、 size_tがunsigned intと同じであると想定することです。これは、たとえば32ビットアーキテクチャから64ビットアーキテクチャに移行するときに、プログラミングエラー[3][4]につながる可能性があります。
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名前空間に効果的に取り込みます。