size_t是无符号类型,用于表示大小和索引,int是有符号类型,用于常规整数运算;两者混用可能导致隐式转换和逻辑错误。

size_t 和 int 是 C++ 中常见的整数类型,但它们的设计目的、取值范围和使用场景有显著区别。理解这些差异对编写可移植、安全的代码非常重要。
本质定义不同
int 是一种有符号整型,通常用于表示常规整数,标准规定其至少为 16 位,但在现代系统中一般是 32 位(4 字节),可表示正负整数。 size_t 是一个无符号整型,专门用来表示对象的大小或内存中的字节数。它在 cstddef 或相关头文件中定义,实际类型依赖于平台和编译器。 例如,在 64 位系统上,size_t 通常是 unsigned long(8 字节),而在 32 位系统上是 unsigned int(4 字节)。取值范围与符号性
int 可表示负数,典型范围是 -2,147,483,648 到 2,147,483,647(32 位)。 size_t 只能表示非负数,最小值为 0,最大值取决于地址空间。比如 32 位系统上最大为 4,294,967,295,64 位系统可达约 1.8×10¹⁹。 由于 size_t 是无符号类型,参与运算时容易引发隐式转换问题。例如:
size_t n = 10;
int i = -1;
if (i
典型使用场景
size_t 常用于:- 数组索引(如 operator[] 的参数)
- 容器的 size() 返回类型(std::vector::size_type 实际就是 size_t 的别名)
- sizeof 运算符的结果类型
- 内存分配函数如 malloc(size_t size)
跨平台与安全性考虑
使用 int 存储容器大小或内存偏移可能在大对象或 64 位系统上溢出。例如: vector基本上就这些。关键点是:size_t 是为系统级尺寸设计的无符号类型,int 是通用有符号整型。根据语义选对类型,代码更健壮。不复杂但容易忽略。











