![](/img/trans.png)
[英]std::size_t vs. size_type as parameters and function return types
[英]<cstdint> vs std::size_t types
從我對boost
和libstdc++
的std::ssize_t
只要事先不知道無符號/有符號索引的上限/下限,這些庫通常會使用std::size_t
和std::ssize_t
。 我的問題是:為什么不情願使用uintmax_t
從<cstdint>
代替std::size_t
和intmax_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_t
和size_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.