从我对boost和libstdc++的浏览来看,当未签名/签名索引的上限/下限事先不知道时,库通常使用std::size_t和std::ssize_t。我的问题是:为什么不选择使用来自<cstdint>的<cstdint>而不是std::size_t和intmax_t而不是std::ssize_t
发布于 2014-05-14 18:25:17
C++11标准(第18.2节)规定:
(5)。类型
ptrdiff_t是一个实现-defi有符号整数类型,它可以容纳数组对象中两个下标的diff请求. (6)。类型size_t是一个实现-defined无符号整数类型,它的大小足以包含任何对象的字节大小。 (7)。注意:建议实现为ptrdiff_t和size_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。
发布于 2014-05-14 16:59:04
前者是C++标准的一部分,后者不是。更确切地说,cstdint头是最近才引入的(在C++11中)。原因是stdint.h本身是C99的一部分,后者比C++98更新。
发布于 2014-05-14 17:03:03
因为size_t类型的目的是描述事物的大小。将它们用于大小比uint_t更具有描述性。
此外,体系结构可能被限制在较小的范围内,因此size_t可能并不总是最大的整数类型。虽然我觉得这有点奇怪。
https://stackoverflow.com/questions/23660705
复制相似问题