我在 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 循环...
最佳答案
我认为问题在于您的 for 循环,如下所示:
for ( auto i : f.vertexIndices )
正在取回已存储顶点的拷贝,而不是对它的引用。此处的编译器警告说您正在设置 i
的值但不读取它,因为您修改的是临时拷贝而不是存储的顶点。
如果你把它改成
for ( auto& i : f.vertexIndices )
那么这个问题应该就会消失,因为您实际上是在修改内部存储的顶点。
希望这对您有所帮助!
关于c++ - 使用 C++11 auto 的 Wunused-but-set-variable 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9135775/