std :: size_t的大小一致

时间:2014-09-15 12:50:35

标签: c++ c++11 abi size-t

我正在编写一组充当接口的纯虚拟类。我们的想法是,实现这些接口的代码可以使用不同的构建配置,编译器甚至是不同的STL实现来构建,以通过这样的接口来利用这样的对象。

uint32_t之类的普通旧数据标准化为doublefloat。 (bool不是,因为标准没有说明它的大小。)

std::size_t属于哪个类别?它纯粹是机器架构的功能吗?例如,在32位机器上,sizeof(std::size_t)是不是4?

2 个答案:

答案 0 :(得分:4)

size_t只需要无符号且足够大以包含任何对象的大小(以字节为单位),因此根据其大小是不可移植的。这在C ++标准草案部分18.2 类型中有所说明:

  

type size_t是一个实现定义的无符号整数类型   它足够大,可以包含任何对象的字节大小。

对于整数,如果您需要特定宽度,则需要使用cstdint header中定义的类型。

注意,标准没有指定 float double 的大小,它们不需要是 IEEE 754 浮点数。

答案 1 :(得分:2)

实际上,doublefloat都没有标准化的尺寸。实际上,唯一的类型是(u)intNN_t类型,它们可能不存在。

因此,您需要的文档不是标准,它是目标编译器文档。

但是为了在编译器,编译器版本,构建配置和标准库之间保持稳定,可以非常安全地假设在任何给定平台上std::size_t具有一致的大小。但请注意,32位和64位版本是不同的平台。