转移到C ++ 11时,不等式比较结果未使用警告

时间:2014-01-18 12:08:47

标签: c++ c++11 for-loop

我刚刚转到C ++ 11并注意到我旧代码上的一些新警告:

ChinaminiC.cpp:70:76: warning: inequality comparison result unused [-Wunused-comparison]
for(std::vector<std::string>::const_iterator cit = _names.begin(); 
    cit != _names.end(), i < _names.size(); 
    cit++, i++)
ChinaminiC.cpp:70:76: note: use '|=' to turn this inequality comparison into an or-assignment

提到的不平等是来自cit != _names.end()的不平等。如果这意味着不检查不等式条件那么这是一个问题(使用i的双重迭代来迭代通过与_names大小相同的参数。给出的建议对我来说似乎不合时宜。在C ++ 11中,一个for循环中的两次迭代的语法是否已更改?

2 个答案:

答案 0 :(得分:4)

(cit != _names.end()) && (i < _names.size());

,运算符评估左侧,丢弃结果。那不是你想要的。您需要将这两个测试与&&(或||)结合使用。

答案 1 :(得分:1)

不,语法没有改变。

cit != _names.end(), i < _names.size()

这里使用的是逗号运算符,这意味着左侧将被评估然后被丢弃,然后将评估右侧。表达式的结果是逗号右侧的结果。

如果要确保两个条件都为真,则需要使用逻辑AND:

cit != _names.end() && i < _names.size()