簡體   English   中英

使用和何時使用 int16_t、int32_t、int64_t 和分別為 short int、int、long int、long

[英]Uses and when to use int16_t,int32_t,int64_t and respectively short int,int,long int,long

使用和何時使用int16_tint32_tint64_t以及分別為shortintlong
C++ 中該死的類型太多了。對於整數,什么時候使用一個而不是另一個是正確的?

當精度很重要時,使用定義良好的類型。 當它不是時使用不太確定的。 使用更精確的永遠不會錯。 當您使用靈活的時,有時會導致錯誤。

當您確實需要精確寬度時,請使用精確寬度類型。 例如, int32_t保證正好是 32 位寬,沒有填充位,並且使用二進制補碼表示。 如果您需要所有這些要求(可能是因為它們是由外部數據格式強加的),請使用int32_t 對於其他[u]intN_t類型也是如此。

如果您只需要至少32 位的有符號整數類型,請使用int_least32_tint_fast32_t ,具體取決於您要優化大小還是速度。 (它們很可能是同一類型。)

當預定義類型shortintlong等對您的目的足夠好並且您不想使用較長的名稱時,請使用它們。 shortint都保證至少為 16 位, long至少為 32 位, long long至少為 64 位。 int通常是系統架構建議的“自然”整數類型; 你可以把它看作int_fast16_t ,並longint_fast32_t ,雖然他們不能保證是相同的。

我沒有給出使用內置與[u]int_leastN_t[u]int_fastN_t類型的嚴格標准,因為坦率地說,沒有這樣的標准。 如果選擇不是由您使用的 API 或組織的編碼標准強加的,那么這實際上是個人品味的問題。 盡量保持一致。

這是個好問題,但很難回答。
在一行中:這取決於上下文:

我的經驗法則:

  • 我更喜歡代碼性能(速度:更少的時間,然后降低復雜性)
  • 使用現有庫時,我會遵循庫編碼風格(上下文)。
  • 在團隊中編碼時,我會遵循團隊編碼風格(上下文)。
  • 在編碼新事物時,我會int16_t,int32_t,int64_t,..使用int16_t,int32_t,int64_t,..

說明:

在某些情況下使用intint是系統字長)可以為您提供性能,但在其他某些情況下則不然。

我會在unsigned long long使用uint64_t ,因為它很簡潔,但unsigned long long有可能。

所以這取決於上下文

我發現它們的一個用途是當我為圖像壓縮器等位打包數據時。 使用這些精確指定字節數的類型可以省去很多麻煩,因為C++ 標准沒有明確定義其類型中的字節數,只有 MIN 和 MAX 范圍。

在 MISRA-C 2004 和 MISRA-C++ 2008 指南中,建議首選特定長度的類型定義:

指示大小和符號的typedef應該用來代替基本的數字類型。 [...]

此規則有助於明確存儲的大小,但由於積分提升的不對稱行為,無法保證可移植性。 [...]

char 類型除外:

字符類型應僅用於字符值的存儲和使用。

但是,請記住 MISRA 指南適用於關鍵系統。

就個人而言,我遵循這些針對嵌入式系統的指南,而不是針對計算機應用程序,在我需要 integer 時我只是使用int ,讓編譯器根據需要進行優化。

暫無
暫無

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

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