我正在编写一组充当接口的纯虚拟类。我们的想法是,实现这些接口的代码可以使用不同的构建配置,编译器甚至是不同的STL实现来构建,以通过这样的接口来利用这样的对象。
uint32_t
之类的普通旧数据标准化为double
和float
。 (bool
不是,因为标准没有说明它的大小。)
std::size_t
属于哪个类别?它纯粹是机器架构的功能吗?例如,在32位机器上,sizeof(std::size_t)
是不是4?
答案 0 :(得分:4)
size_t
只需要无符号且足够大以包含任何对象的大小(以字节为单位),因此根据其大小是不可移植的。这在C ++标准草案部分18.2
类型中有所说明:
type size_t是一个实现定义的无符号整数类型 它足够大,可以包含任何对象的字节大小。
对于整数,如果您需要特定宽度,则需要使用cstdint header中定义的类型。
注意,标准没有指定 float 和 double 的大小,它们不需要是 IEEE 754 浮点数。
答案 1 :(得分:2)
实际上,double
和float
都没有标准化的尺寸。实际上,唯一的类型是(u)intNN_t类型,它们可能不存在。
因此,您需要的文档不是标准,它是目标编译器文档。
但是为了在编译器,编译器版本,构建配置和标准库之间保持稳定,可以非常安全地假设在任何给定平台上std::size_t
具有一致的大小。但请注意,32位和64位版本是不同的平台。