<cstdint> vs std :: size_t types </cstdint>

时间:2014-05-14 16:54:25

标签: c++ c++11 stl

从我已经进入boostlibstdc++开始,每当无符号/的上限/下限时,库通常会使用std::size_tstd::ssize_t已签名的索引事先未知。我的问题是:为什么不使用uintmax_t中的<cstdint>代替std::size_tintmax_t代替std::ssize_t

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

因为size_t类型旨在描述事物的大小。将它们用于尺寸比uint_t更具描述性。

此外,架构可能仅限于较小尺寸的东西,因此size_t可能并不总是最大的整数类型。虽然我觉得这有点奇怪。

答案 2 :(得分:2)

C ++ 11标准(第8.12节)说:

  

(5)。类型ptrdiff_t是一个实现定义的有符号整数类型,它可以保存数组对象中两个下标的差异....

     

(6)。类型size_t是一种实现定义的无符号整数类型,其大小足以包含任何对象的字节大小。

     

(7)。 [注意:建议实施选择ptrdiff_tsize_t的类型,其整数转换等级(4.13)不大于signed long int的类型,除非更大大小是包含所有可能值的必要条件。 -end note ]

由此我们看到:

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

具体取决于平台uintmax_t可能大于size_t

我们也知道:

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

现在混合<cstdint>是C ++的新事物,我认为很明显为什么像Boost这样的已建立的库一直在使用size_t