将int64_t或int32_t分配给ptrdiff_t是否正确?

时间:2015-09-06 10:04:53

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

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

在32位系统上,将int32_t类型的值赋值给ptrdiff_t类型是否正常?

在64位系统上,将int64_t类型的值赋值给ptrdiff_t类型是否正常?

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

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

1 个答案:

答案 0 :(得分:0)

实际上,

static_assert在32位系统上为32位,在64位系统上为64位。它(1)可以更少。在16位系统上,它必须至少为17(是的,这不是一个错字)位。

因为你问,维护代码的人可能不确定这一点。

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

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