1 引言

编程中常见的表示两种大小的类型标识符有 size_tsize_type ,这两种类型十分相似,非常容易混淆。本文对他们的使用场景进行了比较,并提供了示例代码。

2 size_t 类型

当需要描述某个对象的大小(size)时都应该使用 size_t ,其大小被限制为 0 到 SIZE_MAX 之间。
size_t 的定义在 <cstddef> 中, SIZE_MAX 的定义在 <climits> 中。
size_t 一般会作为 sizeof 运算符的返回结果,可以理解为在给定的平台中是统一的。

3 size_type 类型

STL 中定义了 size_type 是与 Allocator::size_tpye 相对应的。而 Allocator 是模板的一个参数。
size_type 可以理解为在给定容器范围内是统一的。

4 二者之间的比较

这两种类型主要是为了提高代码的可移植性。一般情况来说,这两种类型是没有区别的,因为使用标准库默认的 Allocator 所对应的 size_type 就是 size_t

5 示例代码

注意 size_type 在使用时需要加上容器类型限定。

std::size_t n1 = sizeof(int);

std::vector<int> v;
std::vector<int>::size_type n2 = v.size();

std::string s;
std::string::size_type n3 = s.size();