关于size_t和size_type的比较
1 引言
编程中常见的表示两种大小的类型标识符有 size_t
和 size_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();