簡體   English   中英

IntPtr與UIntPtr

[英]IntPtr vs UIntPtr

這應該很簡單:我看到每個人都使用IntPtr ,有什么理由我應該使用UIntPtr嗎?

似乎沒有充分的理由。 來自文檔:

備注

...

IntPtr類型符合CLS,而UIntPtr類型則不符合。 在公共語言運行庫中僅使用IntPtr類型 提供UIntPtr類型主要是為了保持IntPtr類型的架構對稱性。

根據Microsoft UIntPtr提供的主要是建築對稱性。 另一個有趣的觀點是UIntPtr不符合CLS。

從表面上看,IntPtr似乎是首選。 但是,如果你知道你將使用指針算法,那么UIntPtr可能是一個更好的選擇,因為在關閉機會時,有一些模糊的問題處理負值。

有一個很大的區別..例如,在32位應用程序上,新的UIntPtr(0xC01E0001)導致指針位於3223191553,但IntPtr(0xC01E0001)導致System.OverflowException:“算術運算導致溢出”。 也就是說,因為0xC01E0001大於Int32的MaxValue。

因此,如果仍然需要這樣的指針,則需要將負整數用作IntPtr的內部值,例如

unchecked((IntPtr)(int)0xC01E0001)

回答你的問題:對於大於Int32.MaxValue的值,使用UIntPtr更容易,也更簡潔。 它可能總是最好的解決方案,因為指針總是被認為是無符號的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM