![](/img/trans.png)
[英]Why is size_type in std::array size_t and in std::vector usually size_t?
[英]Why size_t is used for indexing / representing size of an array?
§ 18.2 6 類型 size_t 是實現定義的無符號整數類型,它足夠大以包含任何對象的字節大小。
我不明白為什么這保證了size_t
類型對於數組索引足夠大或足夠大以表示數組中的元素數量。
例如:
int array[1000];
for (size_t i = 0; i < 1000; ++i) {
}
為什么“足夠大的數字可以包含對象的字節大小”==保證類型size_t
對數組索引足夠大,這似乎與我無關。
這只是意味着,平台支持的最大數組將可以使用size_t
進行索引。
考慮:
int array[1000];
for (uint8_t i; i < 1000; ++i) {}
這顯然是錯誤的,uint8 沒有索引該數組的范圍。 size_t
總是由標准保證。
至於為什么是字節,使用sizeof array
給出字節大小。 需要有一種類型保證能夠表示結果。
我想使用ptrdiff_t
來索引數組會更具有技術意義,因為這就是數組索引的類型: *(array+index)
。 但這並不常見,我想它看起來更丑,打字時間更長,可能更令人困惑。
請注意,C++ 標准不對任何其他類型做出任何類似的保證。 但是在大多數實際情況下,這個范圍問題有點理論化,因為您可以確定 64 位整數也可以索引任何適合內存的內容。 這對於傳達意圖更為重要。
數組是一個對象。 如果size_t
可以以字節為單位表示數組的大小,那么它肯定也可以表示其中的任何索引,因為單個元素至少有一個字節大小。
該語言根本不允許使用大於該大小的數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.