c++ - std::size_t 或 std::vector<Foo>::size_type?

标签 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(出于兼容性原因)。

最佳答案

std::vector<Foo>::size_type 不一定 为真与std::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)];

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

关于c++ - std::size_t 或 std::vector<Foo>::size_type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45168636/

相关文章:

c++数组零初始化: Is this a bug,或者这是正确的吗?

c++ - 同时支持C++98和C++11

c++ - 执行另一个类的构造函数时出错

C++ 对构造函数的模糊调用

c++ - 从基类指针获取模板派生类值

c++ - 按 C++ 中的公共(public)/重复元素对 vector 进行分组和排序

c++ - 不区分大小写的 std::string.find()

c++ - 如何在静态单例类中以编程方式从 exec 方法返回

c++ - 这是一个错误吗? constexpr 构造函数静默变为非 constexpr

c++ - std::map 键类必须满足哪些要求才能成为有效键?