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

std::size_t or std::vector<Foo>::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(出于兼容性原因)。

不一定正确 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)];

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

can I be sure that every implementation of every container in std namespace uses std::size_t as size_type?

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

size_t can store the maximum size of a theoretically possible object of any type (including array).