具有相同名称的结构化绑定

minecraftplayer1234

我正在编写一些 OpenGL 应用程序,无论如何。在一个地方,我决定使用结构化绑定,因为它可以为我节省大量打字时间。这里是:

for (auto row = 0; row < N - 1; ++row) {
            for (auto col = 0; col < N - 1; ++col) {
                //glColor3f(colors[row][col].R, colors[row][col].G, colors[row][col].B);
                auto[xu, xv, yu, yv, zu, zv] = normal_points[row][col];
                factor = std::sqrt((yu * zv - zu * yv) + (zu * xv - xu * zv) + (xu * yv - yu * xv));
                glNormal3f((yu * zv - zu * yv) / factor, (zu * xv - xu * zv) / factor, (xu * yv - yu * xv) / factor);
                glVertex3f(points[row][col].x, points[row][col].y, points[row][col].z);
                //glColor3f(colors[row + 1][col].R, colors[row + 1][col].G, colors[row + 1][col].B);
                auto[xu, xv, yu, yv, zu, zv] = normal_points[row+1][col];
                factor = std::sqrt((yu * zv - zu * yv) + (zu * xv - xu * zv) + (xu * yv - yu * xv));
                glNormal3f((yu * zv - zu * yv) / factor, (zu * xv - xu * zv) / factor, (xu * yv - yu * xv) / factor);
                glVertex3f(points[row + 1][col].x, points[row + 1][col].y, points[row + 1][col].z);
                //glColor3f(colors[row][col + 1].R, colors[row][col + 1].G, colors[row][col + 1].B);
                auto[xu, xv, yu, yv, zu, zv] = normal_points[row][col+1];
                factor = std::sqrt((yu * zv - zu * yv) + (zu * xv - xu * zv) + (xu * yv - yu * xv));
                glNormal3f((yu * zv - zu * yv) / factor, (zu * xv - xu * zv) / factor, (xu * yv - yu * xv) / factor);
                glVertex3f(points[row][col + 1].x, points[row][col + 1].y, points[row][col + 1].z);
            }
        }

现在的问题是,第一次绑定(使用normal_points[row][col])它可以完美地工作。但是当我这样做时normal_points[row+1][col],我得到的数字是一样的。但在normal_points二维数组中它们不是。证明:

在此处输入图片说明

在此处输入图片说明

因此,在Watch 1选项卡中,您可以看到数组中的这些值不同,但是当我从第一个断点跳到第二个断点时,xu, xvetc.的值没有改变。我该如何解决?是因为我使用相同的名字吗?如果是这样,我不能使用相同的名称吗?(因为我有第二个循环,就像这个循环一样,它真的可以节省大量的输入并提供可读性)

最大66

抱歉,我很惊讶您的代码可以编译。

你写三遍,在同一个范围内,

auto[xu, xv, yu, yv, zu, zv] = <something>;

因此,您在同一范围内定义了3次相同的变量。

建议:使用不同的名称

auto [xu1, xv1, yu1, yv1, zu1, zv1] = normal_points[row][col];
// ...
auto [xu2, xv2, yu2, yv2, zu2, zv2] = normal_points[row+1][col];
// ...
auto [xu3, xv3, yu3, yv3, zu3, zv3] = normal_points[row][col+1];

或使用三个不同的范围

for (auto col = 0; col < N - 1; ++col)
 {
    {
      auto [xu, xv, yu, yv, zu, zv] = normal_points[row][col];
      // ...
    }
    {
      auto [xu, xv, yu, yv, zu, zv] = normal_points[row+1][col];
      // ...
    }
    {
      auto [xu, xv, yu, yv, zu, zv] = normal_points[row][col+1];
      // ...
    }
 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有std :: minmax和rvalues的结构化绑定

具有引用元组的结构化绑定引用

具有相同名称的实例化视图和表

查找具有相同名称但在不同目录结构中的相同文件

C中具有相同定义的相同名称结构

具有相同名称和成员类型但成员名称不同的结构

具有默认名称空间的序列化结构化查询

具有相同名称的SqlDataReader GetOrdinal

具有相同名称的Jaxb对象

具有相同名称的多个div

具有相同名称的多种功能

具有相同名称的值的总和

具有相同名称的多个输入

具有相同名称的Javascript函数

具有结构化绑定的不同简历限定词

使用具有自动范围和结构化绑定的 C++ 迭代向量矩阵?

仅对具有结构化绑定的一个变量使用自动

跳过URI变量“ id”,因为请求包含具有相同名称的绑定值

XJB和JAXB绑定在具有相同名称的simpleType上

JAXB将具有相同名称空间的多个文件绑定到同一包

绑定3个仅部分具有相同名称的数据帧

将数据框的行绑定到具有相同名称的列表中

不同名称空间下具有相同结构的类之间的转换

是否允许不同的翻译单位定义具有相同名称的结构?

转到项目结构以在单个存储库中产生具有相同名称的库和cli

具有相同名称和不同模板参数的两个结构如何工作

从具有相同名称的类型的名称空间实例化全局类型

具有重复孔名称的NLog结构化日志记录

序列化和反序列化具有相同名称的Jackson XML元素