[英]Assigning void* to UINT or unsigned int
是的,就是這種情況。
您的實現可以提供可選的類型uintptr_t
,但其定義如下:
以下類型指定了一個無符號整數類型,其屬性是可以將任何有效的指向void的有效指針轉換為該類型,然后再轉換回指向void的指針,結果將與原始指針進行比較:
uintptr_t
簽名的對方intptr_t
也可能可用。 這些類型在<cstdint>
標頭中可用。
通過選擇使用這些類型,您已經確認您的代碼將僅與在目標計算機上提供此類型的實現的子集一起編譯。
如果void*
不能完全適應游戲結束的單unisigned int
,則大小顯然是一個阻止unisigned int
。 但是,即使sizeof(void*) == sizeof(unsigned int)
您也遇到類型兼容性問題:一個保存數據指針,另一個保存數據指針。 您必須將reinterpret_cast<>()
一個reinterpret_cast<>()
轉換為另一個,並且所有關於此如何工作的賭注都沒有了。
取決於您的應用程序的目標。 您標記了VC++
並提到了UINT
類型-這樣看來您正在為Windows構建。 在32位Windows中,指針大小為32位,而在64位Windows中,指針大小為64位。 但是,兩種Windows版本的UINT
類型的大小都類似於32位。 您可以使用__uint64
或UINT64
MS特定類型而不是UINT來確保它對於指針足夠大。 您還可以使用INT_PTR
/ UINT_PTR
類型,這些類型專門用於匹配指針的大小(因此使它對於32/64位UINT_PTR
透明)。
有關各種數據類型的參考,請參見http://msdn.microsoft.com/zh-cn/library/s3f49ktz.aspx 。
當然,所有這些都會使您的程序無法本地移植到其他體系結構/ OS。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.