std :: size_t或std :: vector <foo> :: size_type?

时间:2017-07-18 13:45:44

标签: c++ stl c++98 size-t size-type

当我循环std::vector<Foo>(或每个具有随机访问迭代器的容器)时,我使用无符号整数变量i。如果我想尊重规范,我应该使用std::size_t还是容器本身给出的类型:std::vector<Foo>::size_type

如果我选择std::size_t(出于可读性原因),我是否可以确定std命名空间中每个容器的每个实现使用std::size_t作为size_type

注意:我仅使用C ++ 98(出于兼容性原因)。

2 个答案:

答案 0 :(得分:4)

std::vector<Foo>::size_typestd::size_t相同,必然为真。即使对于C ++ 11也是如此。

但我个人使用std::size_t作为std::vector索引而不论其类型。

如果你感觉特别勤奋,你总是可以使用静态断言。显然static_assert是C ++ 98中的后续版本,但在该标准中你可以使用类似

的内容。
static char wrong_size_1[1 + sizeof(std::size_t) - sizeof(std::vector<Foo>::size_type)];

static char wrong_size_2[1 - sizeof(std::size_t) + sizeof(std::vector<Foo>::size_type)];
如果类型类型的大小不同,

会导致编译时失败。

答案 1 :(得分:2)

  

我可以确定std命名空间中每个容器的每个实现都使用std::size_t作为size_type吗?

不,你不能。但是在实践中,您可以相信std::size_t对于矢量或基于单个数组的任何其他容器来说足够大,因为

  

size_t可以存储任何类型(包括数组)理论上可能的对象的最大大小。