sizeof(size_t)
可以小于 sizeof(int)
吗?
C 和/或 C++ 标准是否保证使用 unsigned int
进行数组索引总是安全的?
最佳答案
是的,原则上 sizeof(size_t)
可以小于 sizeof(int)
。我不知道有任何实现是正确的,而且很可能没有。我可以想象一个 64 位 int
和 32 位 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 中,并没有明确禁止它,但任何理智的实现都不太可能允许它。
关于c++ - sizeof(size_t) 可以小于 sizeof(int) 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59833124/