假设我有一个类型为
的对象std::map<std::string, std::tuple<int, float>> data;
是否可以嵌套地访问元素类型(例如在范围for循环中使用)?就像这样:
for (auto [str, [my_int, my_float]] : data) /* do something */
假设我有一个类型为
的对象std::map<std::string, std::tuple<int, float>> data;
是否可以嵌套地访问元素类型(例如在范围for循环中使用)?就像这样:
for (auto [str, [my_int, my_float]] : data) /* do something */
不,这是不可能的。
我清楚地记得在某个地方读到过,在C++17中不允许嵌套结构化绑定,但他们正在考虑在未来的标准中允许它。 不过我找不到这个来源了。
auto [[attribute]] [var1, var2]
之后是否允许属性? - Timo不,它们不可能;但是这个可以:
for (auto&& [key, value] : data) {
auto&& [my_int, my_float] = value;
}
至少是相对靠近的。
data
和 value
不是 l-value 吗,所以这些通用引用最终仍将成为 l-value 引用,对吗? - kabaauto&&
,如果我想阻止修改,我会使用 auto const&
,如果我想修改正在迭代的内容,我会使用 auto&
,如果我想要一个可以修改而不影响原始序列的副本,我会使用 auto
。在这里,我不在意,所以我使用 auto&&
;对我来说,auto&&
的意思是“我不在意这个是如何存储的——别名、副本或其他”。 - Yakk - Adam Nevraumont
get()
的引入别名。我无法看出如果两者相同会有什么影响,在我立即想到需要不同限定符的情况下,但如果C++添加了嵌套结构绑定,我不希望它们次于我们当前拥有的功能。而使它们成为一流的似乎是危险的,因为语法可能已经很紧张了! - underscore_d