繁体   English   中英

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

[英]Is it correct to assign int64_t or int32_t to ptrdiff_t?

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

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

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

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

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

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

如您所问,可能某些维护代码的人对此不确定。

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM