之间有什么区别size_t和std::size_t,当他们要使用,任何其他差异化功能在他们的声明,其中条款?
Naw*_*waz 80
C size_t和C++ std::size_t都是一样的.
在C中,它<stddef.h>在C++中定义,其定义<cstddef>的内容与C头相同(参见下面的引用).其定义为无符号整数类型的的结果的的的sizeof运算符.
C标准在§17.7/ 2中说,
为size_t其是无符号整数类型的的结果的的的sizeof操作者
和C++标准cstddef在第18.1/3节中说(关于标题),
内容与标准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位的无符号整数类型.
其余的你可以在维基百科上阅读这个页面.
Mic*_*urr 17
从C++ 03"17.4.3.1.4类型":
对于标准C库中的每个类型T(脚注169),类型:: 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.
hif*_*ier 13
std :: size_t实际上是stddef.h的size_t.
cstddef给出以下内容:
#include <stddef.h>
namespace std
{
using ::ptrdiff_t;
using ::size_t;
}
Run Code Online (Sandbox Code Playgroud)
...有效地将先前的定义带入std命名空间.