【问题标题】:Is it correct to assign int64_t or int32_t to ptrdiff_t?将 int64_t 或 int32_t 分配给 ptrdiff_t 是否正确?
【发布时间】:2015-09-06 10:04:53
【问题描述】:

在移植 c++ 跨平台(Windows 和 Linux)32 位代码以适应 64 位环境时,我遇到了以下问题:

在 32 位系统上,将 int32_t 类型的值分配给 ptrdiff_t 类型在功能上是否正确?

在 64 位系统上,将 int64_t 类型的值分配给 ptrdiff_t 类型在功能上是否正确?

出于兴趣:在 64 位系统上,将 int32_t 类型的值分配给 ptrdiff_t 类型在功能上是否正确?

上下文:有符号的 ptrdiff_t 值用于某些迭代器算术,并且可能会采用负值,因为在迭代器算术逻辑中使用了减法。

【问题讨论】:

标签: c++ 64-bit 32-bit


【解决方案1】:

ptrdiff_t 实际上在 32 位系统上是 32 位,在 64 位系统上是 64 位。它(1)不能少。在 16 位系统上,它必须至少为 17(是的,这不是错字)位。

既然你问了,很可能一些维护代码的人对此不确定。

对于他们来说,只需static_assert 尺寸要求,例如static_assert( sizeof(ptrdiff_t) >= sizeof(int), "").


(1)ptrdiff_t 必须足以表示连续数组中任意两个指向char 的指针的指针差异,因此它必须支持可能的最大数组字节数。

【讨论】:

    猜你喜欢
    • 2019-09-09
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2015-10-19
    • 1970-01-01
    相关资源
    最近更新 更多