【发布时间】:2013-03-29 14:11:12
【问题描述】:
如果我有一个整数向量
vector<int> vec;
我按以下方式循环
for(int i=0; i<vec.size(); i++)
{
// do something
}
我收到有符号/无符号不匹配警告。
当然我可以声明size_t 类型的i 来解决问题。
但是,如果我将i 保留为int,我会在运行时遇到问题吗?
【问题讨论】:
-
您对
i使用错误类型的动机是什么?你没有提到为什么你想使用int。 -
如果
vec.size()大于signed int的正数范围怎么办? -
我认为更一般地说,你会想使用
std::vector<int>::size_type(我想它几乎总是size_t,但仍然如此)。 -
你也可以通过
for(int val:vec)完全避免这个问题 -
@MatsPetersson:加上一些额外的复杂性,
for (X val:vec) { ... }基本上被定义为等同于for(auto it = begin(vec), itend = end(vec); it != itend; ++it) { X val = *it; ... }(其中it和itend不是那些确切的符号,它们可以实现-保留符号或被编译器完全隐藏)。所以 Drew 代码中的int是元素(副本)的类型,而不是索引的类型。
标签: c++ warnings unsigned signed