Я получаю предупреждение -Wunused-but-set-variable с GCC v4.6 с кодом ниже:
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, поэтому пока ничего не компилируется. Но я надеялся, что кто-нибудь скажет мне, является ли это предупреждение бессмысленным, или я неправильно понял auto и range-based for loop ...