簡體   English   中英

<cstdint>對比 std::size_t 類型

[英]<cstdint> vs std::size_t types

從我對boostlibstdc++std::ssize_t只要事先不知道無符號/有符號索引的上限/下限,這些庫通常會使用std::size_tstd::ssize_t 我的問題是:為什么不情願使用uintmax_t<cstdint>代替std::size_tintmax_t代替std::ssize_t

前者是 C++ 標准的一部分,后者不是。 更准確地說, cstdint頭文件最近才被引入(在 C++11 中)。 這樣做的原因是stdint.h本身是 C99 的一部分,它比 C++98 更新。

因為 size_t 類型旨在描述事物的大小。 將它們用於大小比 uint_t 更具描述性。

此外,架構可能僅限於較小尺寸的事物,因此 size_t 可能並不總是最大的整數類型。 雖然我覺得那會有點奇怪。

C++11 標准(第 18.2 節)說:

(5). 類型ptrdiff_t是一個實現定義的有符號整數類型,它可以在一個數組對象中保存兩個下標的差異......

(6). 類型size_t是實現定義的無符號整數類型,它足夠大以包含任何對象的字節大小。

(7). [注意:建議實現為ptrdiff_tsize_t選擇整數轉換等級 (4.13) 不大於有signed long int除非需要更大的大小來包含所有可能的值。 ——尾注]

由此我們看到:

size_t專門用於對象的字節大小,它的配套ptrdiff_t專門用於具有數組索引的數學。 另一方面, uintmax_t是最大的無符號整數類型。

根據平台uintmax_t可能大於size_t

我們也知道:

sizeof返回一個size_t ,並且 STL 容器size_type s 通常與size_t相同,因此在處理sizeof或 STL 容器的代碼中使用size_t是有意義的。

現在混合<cstdint>是 C++ 的新事實,我認為很清楚為什么像 Boost 這樣的成熟庫一直在使用size_t

暫無
暫無

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

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