std::size_t 还是 std::vector<Foo>::size_type?

Cad*_*hon 1 c++ stl size-t size-type c++98

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

如果我选择std::size_t(出于可读性原因),我可以确定std命名空间中每个容器的每个实现都使用std::size_tassize_type吗?

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

Bat*_*eba 5

这不是一定真的std::vector<Foo>::size_type是一样的std::size_t。即使对于 C++11 也是如此。

但就我个人而言std::size_tstd::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)];
Run Code Online (Sandbox Code Playgroud)

如果类型类型的大小不同,这将导致编译时失败。