你应该修复,而不是压制。使用无符号类型:
for (size_t i = 0; i < blahs.size(); ++i)
您也可以使用
unsigned
但是
size_t
在这里更合适(可能有一个不同的、更大的范围)。如果你只使用
i
要迭代而不需要循环中的值,请改用迭代器:
for (auto iter = blahs.begin(), end = blahs.end(); iter != end; ++iter)
如果编译器不支持
auto
替换
汽车
具有
T::iterator
或
T::const_iterator
在哪里
T
是什么类型
blahs
. 如果编译器支持C++ 11的一个更完整的子集,那么,这样做:
for (auto& element : blahs)
这是最好的。
严格地说,上述内容不“正确”。应该是:
typedef std::vector<Blah> blah_vec;
blah_vec blahs;
for (blah_vec::size_type i = 0; i < blahs.size(); ++i)
但这可能很冗长,我知道的每个实现都使用
西泽特
作为
size_type
不管怎样。
如果出于某种原因,您确实需要
我
,你必须铸造:
// assumes size() will fit in an int
for (int i = 0; i < static_cast<int>(blahs.size()); ++i)
// assumes i will not be negative (so use an unsigned type!)
for (int i = 0; static_cast<size_t>(i) < blahs.size(); ++i)
// and the technically correct way, assuming i will not be negative
for (int i = 0; static_cast<blah_vec::size_type>(i) < blahs.size(); ++i)