簡體   English   中英

為什么 size_t 用於索引/表示數組的大小?

[英]Why size_t is used for indexing / representing size of an array?

根據C++ - 你應該用常規數組 size_t 嗎?

§ 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.

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