166

それらが宣言されている場所、それらをいつ使用すべきか、およびその他の差別化機能の違いは何size_tですか?std::size_t

4

3 に答える 3

105

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ビットの符号なし整数型です。

そして残りはウィキペディアのこのページから読むことができます。

于 2011-04-28T04:47:22.193 に答える
18

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です。

于 2011-04-28T04:59:15.133 に答える
16

std :: size_tは、実際にはstddef.hsize_tです。

cstddefは次のようになります。

#include <stddef.h>
namespace std 
{
  using ::ptrdiff_t;
  using ::size_t;
}

...以前の定義をstd名前空間に効果的に取り込みます。

于 2011-04-28T04:55:51.887 に答える