145得票4回答
Lambda隐式捕获无法捕获从结构化绑定声明的变量

使用以下代码,我在 Visual Studio 2017 中遇到了编译错误 C2065 'a': 未声明标识符:[] { auto [a, b] = [] {return std::make_tuple(1, 2); }(); auto r = [&] {return ...

125得票5回答
使用结构化绑定时如何使用std::ignore?

前言:std::tuple<int, int, int> f(); std::tuple<int, int, float, int> g(); C++1z将引入结构化绑定的语法,这将使得我们可以写成:int a, b, c; std::tie(a, b, c) = f(...

74得票2回答
嵌套结构绑定是否可行?

假设我有一个类型为的对象std::map<std::string, std::tuple<int, float>> data; 是否可以嵌套地访问元素类型(例如在范围for循环中使用)?就像这样:for (auto [str, [my_int, my_float]] :...

57得票5回答
为什么C++17的结构化绑定不使用 { }?

我在这里找到了* C ++结构化绑定的原始提案。它提出了一种简单地绑定多个返回值的方法,即:auto {a, b} = minmax(data); 但现在我看到每个人都指向C++17/C++1z建议的语法auto [a, b] = minmax(data); 现在我学到了“列表应该写成 { l...

52得票2回答
使用[[maybe_unused]]的结构化绑定

Functional语言中的模式匹配(有时?)可以忽略一些绑定值,但使用C++17结构化绑定似乎没有办法做到这一点(std::ignore with structured bindings?)。建议使用虚拟名称,但这样会收到未使用变量的警告。 使用最新版本的clang和gcc,这可以做到预期...

50得票3回答
结构化绑定是否适用于std::vector?

能否在向量中使用结构化绑定? 例如:std::vector<int> vec{1, 2, 3}; auto [a, b, c] = vec; 很不幸,上述代码在GCC下无法工作,但也许有一种不同的方法(使用结构化绑定)可以将向量的前三个值分配给三个变量。

46得票2回答
结构化绑定语法能否在多态 Lambda 中使用?

结构化绑定使得使用范围基础for循环迭代映射更加清晰易读,如下所示:for (auto [key, value] : map) { cout << key << " : " << value << endl; } 结构化绑定是否可以像以下...

41得票1回答
为什么分解声明不能是constexpr?

考虑下面的代码片段来测试即将到来的 C++17 特性分解声明(之前被称为结构化绑定)。#include <cassert> #include <utility> constexpr auto divmod(int n, int d) { return std:...

40得票3回答
C++17 结构化绑定,同时包含一个已存在的变量

这篇 Stack Overflow 回答 列出了 C++17 分解声明(原名“结构绑定”)的一些缺点。例如,您无法为新变量指定显式类型等。但我遇到的一个主要缺点没有在那里提到,所以我想知道是否有已知的解决方法,只是我没想到。 考虑此 JSON 解析代码(其中可能包含其他错误,请忽略它们对于本...

32得票1回答
结构化绑定中的const引用是否延长了分解对象的生命周期?

写下const auto& [a, b] = f();能保证延长从f()返回的对象的生命周期,或至少将绑定到对象a和b吗?在阅读提案时,我没有看到明显的语言来确保它除非它被其他事情所覆盖。然而,以下内容不会延长临时对象的生命周期,因此我不知道它如何被覆盖:const auto&...