size_t和std::size_t在声明的位置、应该使用的时间以及其他区别功能方面有什么不同?
发布于 2011-04-28 12:47:22
C的size_t和C++的std::size_t都是一样的。
在C中,它是在<stddef.h>和C++中定义的,它是在<cstddef>中定义的,其内容与C header相同(参见下面的引号)。它被定义为sizeof运算符的结果的无符号整数类型。
C标准在§17.7/2中说,
size_t,是sizeof运算符的结果的无符号整数类型
而C++标准在§18.1/3中说(关于cstddef报头),
其内容与标准C库头文件相同,但有以下变化。
所以,两者是一样的;唯一的区别是C++在std 命名空间中定义了。
还请注意,上面的代码行还显示了“具有以下更改”,这并不是指size_t。更确切地说,它指的是C++对语言(不是C语言)所做的新添加(主要是),这些新添加也定义在同一个头中。
维基百科有关于size_t的范围和存储大小的非常好的信息:
范围和size_t的存储大小
例如,当从32位体系结构迁移到64位体系结构时,size_t的实际整数类型是a size_t 假设size_t与无符号整数相同,这可能导致编程错误,3。
根据1999ISO C标准(C99),size_t是至少16位的无符号整数类型。
剩下的你可以在维基百科的this page上读到。
发布于 2011-04-28 12:55:52
std::size_t实际上是stddef.h的size_t。
cstddef提供了以下内容:
#include <stddef.h>
namespace std
{
using ::ptrdiff_t;
using ::size_t;
}...effectively将先前的定义带入std名称空间。
发布于 2011-04-28 12:59:15
来自C++03 "17.4.3.1.4 Types":
对于标准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。
https://stackoverflow.com/questions/5813700
复制相似问题