gpt4 book ai didi

c++ - 使用 C++11 auto 的 Wunused-but-set-variable 警告

转载 作者:行者123 更新时间:2023-11-30 00:39:10 29 4
gpt4 key购买 nike

我在 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com