Size _ t 与 std: : size _ t 之间的差异

size_tstd::size_t在声明位置、使用时间和其他区别特征方面有什么不同?

39136 次浏览

C 的 size_t和 C + + 的 std::size_t都是相同的。

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

C 标准说在17.7/2,

Size _ t,它是 大小操作符的 结果无符号整数类型

C + + Standard 在18.1/3中说(关于 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 实际上是 Stddef.hSize _ 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。