问题标签 [structured-bindings]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
14686 浏览

c++ - Lambda 隐式捕获因结构化绑定声明的变量而失败

使用以下代码,我得到一个编译错误C2065 'a': undeclared identifier(使用 Visual Studio 2017):

但是,以下代码编译:

我认为这两个样本是等价的。是编译器错误还是我遗漏了什么?

0 投票
1 回答
978 浏览

c++ - if 语句中的结构化绑定初始化程序无法编译

阅读 C++17,现在可以在 if 语句中进行多次初始化:

不错的一个,也结合了 C++17 中的另一个特性,结构化绑定:

但是在 VisualStudio 2017 中结合这两个功能无法编译。

失踪 ';' 前 ','

这是VS2017中的错误还是不可能?

0 投票
2 回答
1487 浏览

c++ - 如果结构化绑定不能是 constexpr 为什么它们可以在 constexpr 函数中使用?

根据这个答案,显然没有充分的理由为什么不允许结构化绑定是 constexpr,但标准仍然禁止它。但是,在这种情况下,不应该禁止在 constexpr 函数中使用结构化绑定吗?考虑一个简单的片段:

gccclang都不会导致编译代码的问题。代码格式是否错误,或者实际上是否允许?

0 投票
2 回答
2195 浏览

c++ - 为什么无法使用结构化绑定分解 lambda 表达式的捕获列表

在你扔烂番茄之前

我知道 lambda 分解的实际应用目前受到限制,因为无法找到对替换失败友好的方法来检查隐藏在分解变量中的 lambda 捕获的数量。这只是一个理论问题,因为我找不到任何涵盖捕获成员变量访问修饰符的标准部分。

例子

标准参考

关于lambda 捕获的标准部分很长,所以我可能错过了相关的片段。我注意到的是,与捕获相对应的非静态成员是/必须是未命名的。

0 投票
1 回答
1502 浏览

c++ - 基于自动范围的结构化绑定与向量

我正在尝试遍历元组向量:

通过使用具有结构化绑定的基于范围的 for 循环:

但是 Visual Studio 2017 15.3.5 给出了错误:

无法推断“自动”类型(需要初始化程序)

但以下确实有效:

这是为什么?

0 投票
2 回答
3984 浏览

c++ - 为什么结构化绑定仅适用于 auto

c++17 引入了结构化绑定。它们能够声明从元组或结构初始化的多个变量。

此代码使用编译器进行c++17编译。

如果我不声明变量,auto我会收到错误

错误:预期的 lambda 表达式主体 [d2 , i2] = tuple;

我使用clang version 4.0.0了和编译选项-std=c++1z

我可以将现有变量分配给结构化绑定吗?我需要使用auto吗?

0 投票
2 回答
2375 浏览

c++ - 结构化绑定和基于范围的绑定;抑制 gcc 中未使用的警告

我想使用结构绑定遍历地图,忽略关键:

我用 gcc-7.2.0 尝试了不同的选项:

似乎[[maybe_unused]]尚未为结构绑定实现该属性。

有什么简单的解决方案吗?任何宏、gcc/gnu 扩展或任何临时禁止该特定警告的编译指示对我来说都可以;例如,在我使用 range-based-for 的整个函数体中禁用它,因为我使用的函数非常短(它基本上是两个具有精确行为的不同映射上的 range-for-loop )。

我用来编译项目的(相关)选项是:

我目前要做的是,但这很丑:

0 投票
2 回答
178 浏览

c++ - 是否有没有“自动”我无法使用的功能(特别是结构化绑定)?

auto引入关键字以简化代码。特别是,迭代 stl 容器变得更容易和更好看,而不必std::vector<MyType>::iterator每次想要循环它时都使用丑陋的语法。但是,仍然可以编写代码而不使用autowhich 会做完全相同的事情。

现在(我认为)如果没有 ,您将无法使用某些功能auto,尤其是结构化绑定:

所以,两个问题:

  1. 我是否正确,如果[x, y]不使用auto(仍然使用结构化绑定)就无法初始化?有没有办法明确地初始化它:*explicit_type* [x, y] = f();
  2. 还需要使用哪些其他功能auto
0 投票
2 回答
2569 浏览

c++ - 遍历元组向量 c+17 样式不起作用?

我目前正在寻找可以迭代这个元组向量的简洁方法。

这就是我目前正在做的事情?

即使它完成了这项工作,它似乎也不是“读者”友好的,还有其他方法可以让我以更读者友好的方式迭代向量的元素吗?

我试图使 for 循环更具可读性的一种方法是这样制作:

但这不知何故给了我这个错误:

0 投票
1 回答
232 浏览

for-loop - 使用结构绑定时,qtcreator 不会自动完成?

我似乎有一个问题,qtcreator 没有自动完成我的代码,这很烦人。

目前,当我尝试在这样的 for 循环中使用结构绑定时,它无法自动完成。

qtcreator 基本上抱怨上面发布的代码的所有内容..

但是当我这样写时:

qtcreator 不会抱怨这段代码,而且似乎可以自动完成它。那么为什么它会导致 c++17 风格出现这么多问题呢?

对此有任何修复吗?