【发布时间】:2012-02-03 21:31:45
【问题描述】:
我在 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() 迭代器获取器,它将始终返回一个非常量迭代器(只要容器是非常量的 - 它就是)。
我目前无法测试它是否按我认为的那样工作,因为我正在更改我的代码库以利用新的 C++11 功能,所以还没有编译。但我希望有人能告诉我这个警告是否是无稽之谈,或者我是否误解了自动和基于范围的 for 循环......
【问题讨论】:
-
“如果
i是元素的副本,则警告将有意义”:您回答了自己的问题:i是元素的副本。
标签: c++ for-loop c++11 compiler-warnings auto