8

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

我想要实现的是拥有一个无符号类型,我可以使用它来存储ptrdiff_t变量的正值而不必担心大值 - 这似乎是size_t.

相反 - 我想要一个有符号类型,我可以存储 的值size_t,同样不用担心大值。

4

2 回答 2

8

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

在 POSIX 中,签名对应的size_tssize_t. 它是由函数返回的类型read(),例如 .

这表明很少有实现的底层类型ssize_tptrdiff_t不同的实现。

于 2012-05-01T13:38:45.720 回答
4

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

请注意,使用 ptrdiff_t` 您会根据比较方式获得差异,因此有符号类型是有意义的(将其更改为无符号类型以获得合理值是微不足道的):

5.7 加法运算符

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

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

于 2012-05-01T13:38:21.260 回答