cma*_*t85 1 c++ for-loop compiler-warnings auto c++11
我正在使用GCC v4.6获得一个-Wunused-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 );
}
}
Run Code Online (Sandbox Code Playgroud)
警告具体是:
warning: variable 'i' set but not used [-Wunused-but-set-variable]
Run Code Online (Sandbox Code Playgroud)
警告将使意义,如果i是一个元素的副本,但由于vertexIndices是一个QList对象(符合STL-QT容器类)的范围为基础的循环应该调用begin()和end()迭代器干将,这将始终返回一个非const迭代器(只要容器是非const的 - 就是它).
我目前无法测试它是否正常工作,因为我正在改变我的代码库以利用新的C++ 11功能,所以没有任何编译.但是我希望有人可以告诉我这个警告是否是无意义的,或者我是否误解了自动和基于范围的循环...
我认为问题是你的for循环,如下所示:
for ( auto i : f.vertexIndices )
Run Code Online (Sandbox Code Playgroud)
正在返回存储顶点的副本,而不是对它的引用.此处的编译器警告表示您正在设置值i而不是读取它,因为您正在修改临时副本而不是存储的顶点.
如果你改成它
for ( auto& i : f.vertexIndices )
Run Code Online (Sandbox Code Playgroud)
那么这个问题应该消失,因为你实际上是在修改内部存储的顶点.
希望这可以帮助!