我注意到现代C和C++代码似乎在几乎所有地方都使用size_t而不是int/unsigned int-从C字符串函数的参数到STL.我很好奇这样做的原因和它带来的好处.

推荐答案

size_t类型是无符号整数类型,是sizeof运算符(和offsetof运算符)的结果,因此它保证足够大,可以包含系统可以处理的最大对象的大小(例如8Gb的静态数组).

size_t类型可能大于、等于或小于unsigned int,编译器可能会对其进行假设以进行优化.

您可以在C99标准第7.17节中找到更精确的信息,该标准的草案在互联网上以pdf格式提供,或者在C11标准第7.19节中也可以以pdf draft格式提供.

C++相关问答推荐

如何系统地使用软件预取?

将C中的2D char数组写入/读取到二进制文件

读取输入数据(在 C 中)后,scanf 是否清空缓冲区?

关于函数中返回局部指针变量的问题

SIMD - 如何从不同元素宽度的 2 个向量中添加相应的值(char 或 uint8_t 添加到 int)

使用R的`.C`接口处理读/写文件

C 编程语言中有范围运算符吗?

为什么 memchr() 将 void 指针作为输入?

在数组中查找与数组均值相同的对

C中的通用快速排序

使用整数存储许多布尔值是否值得?

DirectX11 与多视频适配器 (GPU) PC

C printf中的'I'(大写i)标志是什么?

OpenMP 线程 ID 如何与递归一起工作?

假设指向同一个变量的两个指针是非法的/UB,为什么 C 编译器不能优化更改 const 指针的值?

在 Win32 上双重转换为 unsigned int 被截断为 2,147,483,648

升级到 Catalina 10.15 后无法在 Mac 上编译 C 程序

为什么glibc的strlen需要这么复杂才能快速运行?

程序是 32 位还是 64 位意味着什么?

如果不在内存中,表达式和常量存储在哪里?