NoS*_*ill 4 c c++ sizeof size-t language-lawyer
可以sizeof(size_t)小于sizeof(int)?
C 和/或 C++ 标准是否保证unsigned int用于数组索引总是安全的?
是的,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 中,并没有明确禁止它,但任何理智的实现都不太可能允许它。
| 归档时间: |
|
| 查看次数: |
430 次 |
| 最近记录: |