【发布时间】:2017-12-23 10:20:51
【问题描述】:
当我在std::vector<Foo>(或每个具有随机访问迭代器的容器)上循环时,我使用一个无符号整数变量i。如果我想尊重规范,我应该使用std::size_t还是容器本身给出的类型:std::vector<Foo>::size_type?
如果我选择std::size_t(出于可读性原因),我能否确定std 命名空间中每个容器的每个实现都使用std::size_t 作为size_type?
注意:我只使用 C++98(出于兼容性原因)。
【问题讨论】:
-
不,你不能确定。如果您想避免可能的缩小转换,请使用容器提供的类型。
-
在 64 位 Linux 机器上,
size_t可以是unsigned long的 typedef 和std::vector::size_type可以是unsigned long long。两者都是 64 位宽,范围相同,但类型不同。 (example) -
您可以使用模板类,根据
std::size_t和std::vector<T>::size_type是否具有相同的大小来选择要使用的类型(我现在无法尝试实现它,但我'我很确定这是可行的)。 -
@NathanOliver :最初,我有这种反应是因为我在任何地方都错误地使用了
unsigned long int(可以使用gcc,std::size_t是unsigned long int)。现在我在使用std::size_t是unsigned long long int的英特尔编译器移植到Windows 时遇到了兼容性问题。 :-/
标签: c++ stl c++98 size-t size-type