为什么 size_t 用于索引/表示数组的大小?

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

根据C++ - should you size_t with a regular array?

§ 18.2 6 The type size_t is an implementation-defined unsigned integer type that is large enough to contain the size in bytes of any object.

我不明白为什么这保证类型 size_t 足够大以用于数组索引或足够大以表示数组中 元素的数量 .

例如:

int array[1000];

for (size_t i = 0; i < 1000; ++i) {

}

为什么 "large enough number to contain the size in bytes of an object" == 保证 类型 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 可以表示数组的字节大小,那么它肯定也可以表示其中的任何索引,因为单个元素至少有一个字节大小。

语言根本不允许大于此大小的数组。