use*_*147 7 c++ size-t language-lawyer ptrdiff-t
在我的平台上(以及我认为的大多数平台上)std::size_t并且std::ptrdiff_t 具有相同的大小和相同的对齐方式。有没有哪个平台不是真的?简而言之:标准是否要求?
简而言之:标准是否要求?
不。唯一的要求来自[support.types.layout]/2,它是:
类型 ptrdiff_t 是一个实现定义的有符号整数类型,它可以在一个数组对象中保存两个下标的差异,如 [expr.add] 中所述。
有第4段
[ 注意:建议实现为 ptrdiff_t 和 size_t 选择整数转换等级不大于有符号 long int 的类型,除非需要更大的大小来包含所有可能的值。— 尾注 ]
但注释是非规范性的,它只是一个建议,而不是一个要求。
std::size_t 被定义为
类型 size_t 是实现定义的无符号整数类型,它足够大以包含任何对象的字节大小 ([expr.sizeof])。
在第 3 段中,它也没有要求它们是相同的。