size_t和 std::size_t在声明位置、使用时间和其他区别特征方面有什么不同?
size_t
std::size_t
C 的 size_t和 C + + 的 std::size_t都是相同的。
在 C 中,它在 <stddef.h>和 C + + 中定义,在 <cstddef>中定义,其内容与 C 头相同(参见下面的引用)。它被定义为 大小操作符的 结果的 无符号整数类型。
<stddef.h>
<cstddef>
C 标准说在17.7/2,
Size _ t,它是 大小操作符的 结果的 无符号整数类型
C + + Standard 在18.1/3中说(关于 cstddef头部) ,
cstddef
内容与标准 C 库头 有以下改动相同。
所以是的,两者是相同的; 唯一的区别是 C + + 在 ABC1名称空间中定义了 size_t。
还请注意,上面的行也说 “有以下变化”,这并不是指 size_t。相反,它指的是 C + + 在语言中添加的新内容(大部分)(C 语言中没有) ,这些内容也是在同一个头中定义的。
Wikipedia 上有很多关于 size _ t 的范围和存储大小的信息:
Size _ t 的范围和存储大小 Size _ t 的 真的类型是 依赖于平台的常见错误 就是假设 size _ t 与 无符号整型,它可以导致 移动时的编程错误 64位元 例子。 根据1999年的 ISO 标准 Standard (C99) ,size _ t 是一个无符号 至少16位的整数类型。
Size _ t 的范围和存储大小
Size _ t 的 真的类型是 依赖于平台的常见错误 就是假设 size _ t 与 无符号整型,它可以导致 移动时的编程错误 64位元 例子。
根据1999年的 ISO 标准 Standard (C99) ,size _ t 是一个无符号 至少16位的整数类型。
剩下的你可以从维基百科的 这一页中读到。
Size _ t 实际上是 Stddef.h的 Size _ t。
Cstddef 提供以下信息:
#include <stddef.h> namespace std { using ::ptrdiff_t; using ::size_t; }
... 有效地将前面的定义引入到 std 名称空间中。
摘自 C + + 03“17.4.3.1.4类型”:
对于 Standard C 库中的每个类型 T (脚注169) ,类型: : T 和 std: : T 保留给实现,在定义时,: T 应该与 std: : T 相同。
脚注169:
这些类型是 lock _ t、 div _ t、 FILE、 fpos _ t、 lconv、 ldiv _ t、 mbstate _ t、 ptrdiff _ t、 sig _ atom _ t、 size _ t、 time _ t、 tm、 va _ list、 wctrans _ t、 wctype _ t 和 wint _ t。