簡體   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