在移植c ++跨平台(Windows& Linux)32位代码以适应64位环境的同时,我遇到了以下问题:
在32位系统上,将int32_t类型的值赋值给ptrdiff_t类型是否正常?
在64位系统上,将int64_t类型的值赋值给ptrdiff_t类型是否正常?
出于兴趣:在64位系统上,将int32_t类型的值分配给ptrdiff_t类型是否正常?
上下文:签名的ptrdiff_t值用于某些迭代器算法,并且可能采用负值,因为迭代器在迭代器算术逻辑中使用。
答案 0 :(得分:0)
static_assert
在32位系统上为32位,在64位系统上为64位。它(1)可以更少。在16位系统上,它必须至少为17(是的,这不是一个错字)位。
因为你问,维护代码的人可能不确定这一点。
对于他们来说,只需static_assert( sizeof(ptrdiff_t) >= sizeof(int), "")
尺寸要求,例如ptrdiff_t
。
(1) char
必须足以表示连续数组中content
的任意两个任意指针的指针差异,因此它必须支持最大可能的字节数组。
功能