std::size_t 的大小有多一致

P45*_*ent 1 c++ size-t abi c++11

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

像和一样的普通旧数据uint32_t是标准化的。(不是因为标准没有说明它的大小。)doublefloatbool

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

Sha*_*our 5

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

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

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

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