[英]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
並不是因為它是正確的“通用”整數類型,而是因為您有“特殊需要”。
如果您對所有事物都使用了long
或long long
,那么您將使人們感到困惑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.