【问题标题】:What is the unsigned counterpart of ptrdiff_t?ptrdiff_t 的无符号对应物是什么?
【发布时间】:2012-05-11 00:30:48
【问题描述】:

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

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

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

【问题讨论】:

标签: c++


【解决方案1】:

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

在 POSIX 中,size_t 的签名对应项是 ssize_t。例如read()等函数返回的类型。

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

【讨论】:

    【解决方案2】:

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

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

    5.7 加法运算符

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

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

    【讨论】:

    • 通过阅读您的回答,我认为ssize_t 不存在。
    • @fontanini:在标准 C 中,没有类型 ssize_t;这是对 C 标准的 POSIX 扩展。
    • 糟糕,我以为这是标准定义。我的坏:D
    猜你喜欢
    • 2021-04-21
    • 2010-09-09
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    相关资源
    最近更新 更多