簡體   English   中英

__int32 與 int 與 int32_t 之間的區別(再次)

[英]Difference between __int32 vs int vs int32_t (again)

web( )的答案只說了一部分,省略了一些細節,希望大家幫我澄清一下:

  • int,按照 C++ 標准,必須 >= 32 位。
  • 默認情況下,不同的編譯器(實現)可以使int分配不同數量的位。 因此,當我聲明 integer 時, Compiler A可以使int分配 50 位(例如)。
  • 此外,不同的編譯器可能/可能不會使用位填充進行優化
  • __int32 (Microsoft-specifc)和int32_t在這里解決問題並且:

我的哪一個猜測是正確的? 很抱歉再次提出老問題,但實際上我對所有分配功能感到困惑。

在此先感謝您的時間。

我的哪一個猜測是正確的?

  • int,按照 C++ 標准,必須 >= 32 位。

不正確。 int必須 >= 16 位。 long必須 >= 32 位。

不同的編譯器(實現)可以使 int 分配不同數量的位

正確的。

... 默認。

我不知道有可配置 int 大小的編譯器——它通常直接取決於目標體系結構——但我想這是有可能的。

此外,不同的編譯器可能/可能不使用位填充

他們可能會。 他們不需要這樣做。

__int32(Microsoft-specifc)和 int32_t 在這里解決問題並且:

  • 強制編譯器恰好分配 32 位。

  • 切勿在此數據類型之前/之后使用位填充。

正確的。 更具體地說, std::int32_t是一種基本類型的別名,它正好有 32 位且沒有填充。 如果編譯器沒有提供這樣的 integer 類型,那么也不會提供std::int32_t別名。

Microsoft 文檔承諾__int32存在並且它是int的另一個名稱,並且它有 32 個非填充位。 在其他地方,Microsoft 記錄了int32_t也是int的別名。 因此,除了__int32不是標准名稱之外沒有其他區別。

網絡上的答案( )只講述了故事的一部分,並省略了一些我希望您幫助我澄清的細節:

  • 根據 C++ 標准,int 必須 >= 32 位。
  • 默認情況下,不同的編譯器(實現)可以使int分配不同數量的位。 所以Compiler A可以讓int在我聲明整數時分配50位(例如)。
  • 此外,不同的編譯器可能/可能不使用位填充進行優化
  • __int32 (Microsoft- __int32 ) 和int32_t是用來解決問題的,並且:

我的哪個猜測是正確的? 很抱歉再次提出舊問題,但我實際上對所有這些分配功能感到困惑。

在此先感謝您的時間。

暫無
暫無

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

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