![](/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.