为什么 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
可以表示数组的字节大小,那么它肯定也可以表示其中的任何索引,因为单个元素至少有一个字节大小。
语言根本不允许大于此大小的数组。
根据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
可以表示数组的字节大小,那么它肯定也可以表示其中的任何索引,因为单个元素至少有一个字节大小。
语言根本不允许大于此大小的数组。