什么是ptrdiff_t的未签名对应物?

时间:2012-05-01 13:31:58

标签: c++

ptrdiff_t的未签名对应方是什么? 同样 - size_t的签名对应方是什么?

我想要实现的是使用无符号类型来存储ptrdiff_t变量的正值而不用担心大值 - 这似乎是size_t。

相反 - 我希望有一个签名类型,我可以存储size_t的值,同样不用担心大值。

2 个答案:

答案 0 :(得分:8)

我认为ptrdiff_t(没有uptrdiff_t)没有正式的未签名对应方,但使用size_t非常合理。

在POSIX中,size_t的签名对应方为ssize_t。它是由read()等函数返回的类型。

这表明很少有实现ssize_tptrdiff_t的基础类型会有所不同。

答案 1 :(得分:4)

size_t用于表示对象大小。人们普遍认为编译器编写者不会创建负大小的对象。

请注意,使用ptrdiff_t`可以获得差异,具体取决于您的比较方式,因此签名类型是有意义的(将此值更改为无符号类型以获得合理的值很简单):

  

5.7添加剂运算符

     

6 [...]与任何其他算术溢出一样,如果结果不适合所提供的空间,则行为未定义。[...]

因此,您可能需要为“非常大的值”创建一个特殊类型。