我收到了 GCC v4.6 的 -Wunused-but-set-variable 警告,代码如下:
for ( auto i : f.vertexIndices ) {
Sy_MatrixFuzzyHashable< Vector3f > wrapper( cp );
if ( !vMapper.contains( wrapper ) ) {
mesh.vertexNormals() << cp;
i.normal = mesh.vertexNormals().size() - 1;
} else {
i.normal = vMapper.value( wrapper );
}
}
警告具体是:
warning: variable 'i' set but not used [-Wunused-but-set-variable]
i
如果是元素的副本,则警告将有意义,但由于vertexIndices
是QList
对象(符合 STL 的 Qt 容器类),基于范围的 for 循环应调用 begin() 和 end() 迭代器 getter,它将始终返回一个非常量迭代器(只要容器是非常量的 - 它就是)。
我目前无法测试它是否按我认为的那样工作,因为我正在更改我的代码库以利用新的 C++11 功能,所以还没有编译。但我希望有人能告诉我这个警告是否是无稽之谈,或者我是否误解了自动和基于范围的 for 循环......