繁体   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