首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><cstdint>与std::size_t类型

<cstdint>与std::size_t类型
EN

Stack Overflow用户
提问于 2014-05-14 16:54:25
回答 3查看 1.4K关注 0票数 4

从我对boostlibstdc++的浏览来看,当未签名/签名索引的上限/下限事先不知道时,库通常使用std::size_tstd::ssize_t。我的问题是:为什么不选择使用来自<cstdint><cstdint>而不是std::size_tintmax_t而不是std::ssize_t

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-14 18:25:17

C++11标准(第18.2节)规定:

(5)。类型ptrdiff_t是一个实现-defi有符号整数类型,它可以容纳数组对象中两个下标的diff请求. (6)。类型size_t是一个实现-defined无符号整数类型,它的大小足以包含任何对象的字节大小。 (7)。注意:建议实现为ptrdiff_tsize_t选择类型,它们的整数转换级别(4.13)不大于signed long int,除非需要更大的大小才能包含所有可能的值。-end注记

从这一点我们可以看出:

size_t专门用于对象的字节大小,它的配套ptrdiff_t专门用于数组索引的数学。另一方面,uintmax_t是最大的无符号整型。

根据平台的不同,uintmax_t可能比size_t更大。

我们还知道:

sizeof返回一个size_t,而STL容器size_type通常与size_t相同,所以在处理sizeof或STL容器的代码中使用size_t是有意义的。

现在,<cstdint>是C++的新版本,我认为很清楚为什么像Boost这样的老牌库一直在使用size_t

票数 2
EN

Stack Overflow用户

发布于 2014-05-14 16:59:04

前者是C++标准的一部分,后者不是。更确切地说,cstdint头是最近才引入的(在C++11中)。原因是stdint.h本身是C99的一部分,后者比C++98更新。

票数 3
EN

Stack Overflow用户

发布于 2014-05-14 17:03:03

因为size_t类型的目的是描述事物的大小。将它们用于大小比uint_t更具有描述性。

此外,体系结构可能被限制在较小的范围内,因此size_t可能并不总是最大的整数类型。虽然我觉得这有点奇怪。

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

https://stackoverflow.com/questions/23660705

复制
相关文章

相似问题

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