sizeof(size_t) 可以小于 sizeof(int) 吗?

NoS*_*ill 4 c c++ sizeof size-t language-lawyer

可以sizeof(size_t)小于sizeof(int)

C 和/或 C++ 标准是否保证unsigned int用于数组索引总是安全的?

Kei*_*son 9

是的,sizeof(size_t)原则上可以小于sizeof(int)。我不知道有任何实现是正确的,而且很可能没有。我可以想象一个 64-bitint和 32-bit 的实现size_t

但是索引数组unsigned int是安全的——只要索引的值在数组长度规定的范围内。[]运算符的参数只需要是一个整数。它没有转换为size_t. 它是根据指针算术定义的,其中+运算符有一个参数是指针,另一个参数是任何整数类型。

如果unsigned int大于size_t,那么unsigned int超过的索引值SIZE_MAX几乎肯定会导致问题,因为数组不是那么大。在 C++14 及更高版本中,SIZE_MAX明确禁止定义大于字节的类型(3.9.2 [compound.types] 第 2 段)。在早期版本的 C++ 和所有版本的 C 中,并没有明确禁止它,但任何理智的实现都不太可能允许它。

  • 此外,如果对象的大小确实限于可以用“size_t”表示的值,那么原始问题是有意义的,“size_t”类型的索引可以表示至少一个对于每个数组来说超出范围的值。对于实际程序中实际观察到的几乎所有数组,“size_t”可以表示*很多*越界索引。它与对象的最大可能大小(如果存在)的关联并不会使索引更安全。 (2认同)