簡體   English   中英

通用整數應該使用哪種數據類型?

[英]What data type should I use for a general purpose integer?

C ++中的通用整數應使用哪種數據類型?

顯而易見的答案是int ,這在過去很有意義,在16位計算機上通常為16位,而在32位計算機上通常為32位。 但是現在64位代碼變得越來越普遍,但是int在那些編譯器上通常是32位。 因此,我們不能認為int不再是該系統的“最快”或最大類型。

另一個問題是從數據結構和文件的大小傳播64位值。 我知道您可以將這些值存儲在32位int中,並且在大小不太大的情況下可以避免使用。 但是,如果用戶想要的話,我想編寫可以處理最大數據量的代碼。 我不希望我的代碼在用戶打開5gb文件並希望將其存儲在內存中的情況下消失,因為大小存儲在int某個地方。 有朝一日16 + gb ram系統將成為常態,我希望我的代碼仍能正常工作。

我知道有諸如vector<T>::size_type類的類型可以存儲該數據。 但是,如果大小數據可以來自幾種不同的容器和流類型怎么辦? 是否應該對所有可以存儲大小信息的整數使用size_t

因此,我不得不得出結論,我應該使用size_t數據類型(或等效的帶符號數據,現在每個數據結構最多可以容納9,223,372,036,854,775,807字節),而不是int ,用於通用用途,但這不是事實我觀察到在實踐中int仍然很常用。

我應該使用哪種整數數據類型進行通用計算?這樣做的技術原因是什么?

根據情況,您可以使用不同的整數。 通常,有兩大類整數-它們與程序建模的數據(即域數據)有關,而與程序本身的構造有關。

程序域中的整數(例如,用戶數據,程序收集或計算的數據等)應使用提供特定大小的類型來表示。 在C ++中,這些類型在<cstdint>標頭中定義。 例如,如果您需要可在所有平台上移植的帶符號的32位類型,請使用int32_t ; 如果您需要一個64位無符號數字,請使用uint64_t ,依此類推。

如果您擔心執行速度,請使用帶有fastN_t后綴的整數類型,例如uint_fast16_t作為16位快速無符號整數。

當獲取數據結構的大小或減去指針時,將創建與程序構造有關的整數。 使用size_t表示大小,使用ptrdiff_t表示指針差異。

int是“通用”。 除非有原因,否則應使用int 實際上,使用int以外的任何其他信息的事實表明,正在閱讀代碼的人們沒有在進行“通用計算”。 它甚至在標准本身中說得很對,

普通int具有執行環境的結構建議的自然大小44; 提供其他有符號整數類型以滿足特殊需要。

如果要索引的文件可能很大,則不再進行通用計算。 fseek接受long類型的參數,而不是int類型。 您之所以會使用long並不是因為它是正確的“通用”整數類型,而是因為您有“特殊需要”。

如果您對所有事物都使用了longlong long ,那么您將使人們感到困惑。

暫無
暫無

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

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