size_t和std :: size_t之间的区别
size_t
和std::size_t
在声明的位置和应该使用的地方以及其他区别特征之间有什么区别?
C的size_t
和C ++的std::size_t
都是相同的。
在C中,它定义在<stddef.h>
和C ++中,定义在<cstddef>
其内容与C头相同(请参见下面的引用)。 它被定义为sizeof运算符的结果的无符号整数types 。
C标准在§17.7/ 2中说,
size_t是sizeof运算符的结果的无符号整数types
而C ++标准在§18.1/ 3中说(关于cstddef
头)
内容与标准C库标题相同,但有以下更改 。
所以是的,两者都是一样的。 唯一的区别是C ++在std
命名空间中定义了size_t
。
还请注意,上面的行也说“以下更改” ,这是不是指的size_t
。 它更多的是指由C ++语言(不存在于C语言中)在同一个头文件中定义的新增(大部分)。
维基百科有关于size_t的范围和存储大小的非常好的信息:
size_t的范围和存储大小
size_t的实际types是平台相关的 ; 一个常见的错误是假设size_t与unsigned int相同,例如,当从32位移植到64位体系结构时,会导致编程错误[3] [4]。
根据1999年的ISO C标准(C99),size_t是至less16位的无符号整数types。
其余的你可以在wikipedia的这个页面上阅读。
从C ++ 03“17.4.3.1.4types”:
对于来自标准C库(脚注169)的每个typesT,types:: T和std :: T被保留给实现,并且在定义时,:: T应该与std :: T相同。
而脚注169:
这些types是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命名空间。