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

问题描述:

虽然上移植一个C++跨平台(Windows & Linux)的32位的代码,以容纳64位环境中工作的我有以下问题:将int64_t或int32_t分配给ptrdiff_t是否正确?

在32位的系统是其功能上正确的从一个int32_t类型分配一个值到一个ptrdiff_t类型?

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

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

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

+0

[参考文档](http://en.cppreference.com/w/cpp/types/ptrdiff_t)说它是实现定义的。 –

ptrdiff_t在实践中是一个32位的系统上32位,64位的系统上的64位。它(1)不能少。在16位系统中,它必须至少有17位(是的,这不是拼写错误)位。

既然你问了,可能有些维护代码的人不确定这一点。

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


(1)ptrdiff_t必须足以代表到char在连续阵列中的任何两个任意指针的指针差,所以它必须支持字节的最大可能数组。