问题标签 [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.
c++ - lambda 参数中的结构化绑定
为什么在这种情况下我不能使用 C++17 结构化绑定?
c++ - 如何在 C++17 中检查名称是别名还是引用?
来自cppref
与引用一样,结构化绑定是现有对象的别名。与引用不同,结构化绑定的类型不必是引用类型。
例如:
x
并且y
是别名而不是引用。我的问题:
如何实现类型检查功能is_alias_v<decltype(x)>
?
c++ - 使用 Qt 的这种结构化绑定的 GCC 分段错误
我在 GCC 中遇到了这段代码的分段错误,但使用 MSVC 编译得很好
结构化绑定会发出段错误。
日志:
解决方案
将结构化绑定声明为引用。
看起来 GCC 无法推断出限定符,因为 operator[] 返回一个 T&。
c++ - 结构数据成员的decltype,使用结构化绑定
我有一个模板采用在结构上可绑定到两个别名的类型(可以是元组,也可以是结构)。我需要别名指向的这两个变量的类型。
在实际使用结构化绑定之前,我需要知道类型:
c++ - 禁用未使用的结构化绑定的警告
我正在提取一个元组,auto [...]
但我只使用一些元组坐标。我想知道是否有一些优雅的方法可以避免unused-variable
编译器警告?这是我的代码。
这是编译行+警告:
(我使用了一个类似 Haskell 的变量_
来自我记录最后一个 int 是一个无关值的事实)。
c++ - 结构化绑定以获取子向量的连续元素而无需复制
我有一个std::vector<T> vec
感兴趣的 3 个元素的连续块。为了便于处理,我想提取这些元素。目前,代码如下所示:
我想使用结构化绑定将 , 的提取压缩a
到b
一行c
。
一个简单的选项将类似于以下内容:
问题是我想避免无用的数据复制。我不确定,但似乎向量元素将在这里复制到元组中。使用std::tuple<T&, T&, T&>
是一种选择吗?
c++ - 无法让 std::ignore 在范围内的结构化绑定中工作
此代码编译并运行,并带有“未使用的变量 i”警告:
我想忽略 i,所以我将其替换为std::ignore
. 以下代码无法编译:
出现此错误:
这个警告:
因为它无法识别 std::ignore。
一些上下文:
- 我将 C++17 与 gcc 7.4.0 和 Eclipse CDT 一起使用。
- 语法检查器显示与编译器相同的错误。这是连贯的。
- 同一项目的许多 cpp 文件中的其他范围也存在同样的问题。这是一个普遍的问题,而不是特别局限于那条特定的线。
只是为了测试,这一行编译得很好:
标准::忽略 = 0;
所以 gcc 识别 std::ignore,它只是在范围内没有这样做。
已经阅读了这个关于忽略结构化绑定的好问题和答案。
有没有人有类似的问题?
谢谢!
c++ - unordered_map 结构化绑定中的推导类型
我试图通过使用 和 来查看 unordered_map 的结构化绑定中的auto
推导auto &
类型auto &&
。
无论我使用for(auto [k,v]:m)
or for(auto & [k,v]:m)
or for(auto && [k,v]:m)
,输出总是
我的问题是:
为什么在or的情况下
decltype(k)
anddecltype(v)
不是引用类型?for(auto & [k,v]:m)
for(auto && [k,v]:m)
为什么
decltype(k)
是类型const
的情况下for(auto [k,v]:m)
?
c++ - 在 C++ 中解构时如何隐藏现有变量?
解构 a 时有没有办法隐藏现有变量std::pair
?例如,如果我定义了以下函数:
然后这个main
函数工作正常,因为我从返回的新变量std::pair
:
输出:
但我不能使用相同的变量名并隐藏现有变量,因为这会尝试再次实际声明它们:
错误:
我也试过没有auto
,但这给出了一个完全不同的错误:
错误:
有没有办法做到这一点?
c++ - What is the best practice for performing structured bindings on read-only (i.e. const) accessors?
Consider the following class foo
:
I would like to implement structured bindings for foo
, so I added the following:
Now, if the user is to perform structure bindings, he/she has to explicitly add a const qualifier:
(Because we cannot bind int&
to a int const&
)
Or, alternatively, I can make tuple_element
typedef a const int
. Now all four statements compiles:
Now note that even if no const qualifier is present in their declarations, a
, b
, x
, and y
are all int const
. This might be confusing to the user.
So my question is: which one of the above is considered a better practice?