ptrdiff_t的未签名对应方是什么? 同样 - size_t的签名对应方是什么?
我想要实现的是使用无符号类型来存储ptrdiff_t变量的正值而不用担心大值 - 这似乎是size_t。
相反 - 我希望有一个签名类型,我可以存储size_t的值,同样不用担心大值。
答案 0 :(得分:8)
我认为ptrdiff_t
(没有uptrdiff_t
)没有正式的未签名对应方,但使用size_t
非常合理。
在POSIX中,size_t
的签名对应方为ssize_t
。它是由read()
等函数返回的类型。
这表明很少有实现ssize_t
和ptrdiff_t
的基础类型会有所不同。
答案 1 :(得分:4)
size_t
用于表示对象大小。人们普遍认为编译器编写者不会创建负大小的对象。
请注意,使用ptrdiff_t`可以获得差异,具体取决于您的比较方式,因此签名类型是有意义的(将此值更改为无符号类型以获得合理的值很简单):
5.7添加剂运算符
6 [...]与任何其他算术溢出一样,如果结果不适合所提供的空间,则行为未定义。[...]
因此,您可能需要为“非常大的值”创建一个特殊类型。