size_t和std :: size_t之间的区别

时间:2011-04-28 04:41:42

标签: c++ size-t

size_tstd::size_t在声明它们的位置,何时使用以及任何其他差异化功能方面有何区别?

3 个答案:

答案 0 :(得分:74)

C size_t和C ++ std::size_t都是一样的。

在C中,它在<stddef.h>和C ++中定义,在<cstddef>中定义,其内容与C头相同(参见下面的引文)。它被定义为 sizeof 运算符的结果无符号整数类型

C标准在§17.7/ 2中说,

  

size_t是 sizeof 运算符的结果无符号整数类型

C ++ Standard在§18.1/ 3中说(约cstddef标题),

  

内容与标准C库标题相同,但有以下更改

所以是的,两者都是一样的; 唯一的区别是C ++在size_t命名空间中定义了std

另请注意,上面一行还说“带有以下更改”,而不是size_t。它更多地是指C ++对语言(不存在于C中)所做的新增(主要是),它们也在同一标题中定义。


维基百科有关于size_t的范围和存储大小的非常好的信息:

  

size_t的范围和存储空间

     

size_t的实际类型是   的平台相关; 常见错误   假设size_t与。相同   unsigned int,可以导致   编程错误,移动时[3] [4]   从32位到64位架构,用于   示例

     

根据1999 ISO C   标准(C99),size_t是无符号的   整数类型至少为16位。

其余的你可以在维基百科上阅读this page

答案 1 :(得分:16)

从C ++ 03“17.4.3.1.4类型”:

  

对于标准C库(脚注169)中的每个类型T,类型:: T和std :: T保留给实现,并且在定义时,:: T应与std :: T相同。< / p>

脚注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。

答案 2 :(得分:11)

std :: size_t 实际上是 stddef.h size_t

cstddef 给出以下内容:

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

...有效地将先前的定义带入std命名空间。