c++ - sizeof(size_t) 可以小于 sizeof(int) 吗?

标签 c++ c language-lawyer sizeof size-t

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

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

最佳答案

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

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

如果 unsigned intsize_t 宽,那么超过 unsigned intSIZE_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/

相关文章:

c - 为什么交错的 scanf() + printf() 语句导致先执行两个 scanf() 调用,然后执行两个 printf() 调用?

c - 当先前定义的字符串数组的第一个字符串为 null 时,scanf() 不读取输入字符串

c++ - 指针转换是否保持对齐属性?

c++ - 如果我使用 startDetached 启动 QProcess,我会得到一个完成的插槽吗

c++ - 从文件中读取,存储到链表中,然后再次打印到文件中

c++ - C++中的数组乘法

c++ - 成员右值引用和对象生命周期

c++ - 使用eclipse 编辑C++ 代码。如何在不编辑所有代码的情况下自动包含默认头文件

c - 在 C 中直接传递变量地址和传递指针(指向同一变量)之间的区别?

c++ - 如果对好友应用访问控制怎么办?