首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >size_t与std::size_t的区别

size_t与std::size_t的区别
EN

Stack Overflow用户
提问于 2011-04-28 12:41:42
回答 3查看 34.5K关注 0票数 163

size_tstd::size_t在声明的位置、应该使用的时间以及其他区别功能方面有什么不同?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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上读到。

票数 103
EN

Stack Overflow用户

发布于 2011-04-28 12:55:52

std::size_t实际上是stddef.h的size_t。

cstddef提供了以下内容:

代码语言:javascript
运行
复制
#include <stddef.h>
namespace std 
{
  using ::ptrdiff_t;
  using ::size_t;
}

...effectively将先前的定义带入std名称空间。

票数 16
EN

Stack Overflow用户

发布于 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。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5813700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档