【发布时间】:2017-10-04 18:28:59
【问题描述】:
我正在尝试遍历元组向量:
std::vector<std::tuple<int, int, int>> tupleList;
通过使用基于范围的 for 循环和结构化绑定:
for (auto&& [x, y, z] : tupleList) {}
但是 Visual Studio 2017 15.3.5 给出了错误:
无法推断“自动”类型(需要初始化器)
但以下方法确实有效:
for (auto&& i : tupleList) {
auto [x, y, z] = i;
}
为什么会这样?
【问题讨论】:
-
你为什么用
&&而不是&? -
@Charles
&&即使元素是 const 或 temporaries 也会起作用 -
VS 错误,它应该可以工作。甚至是语言功能的动机之一(迭代地图)!
-
const auto也可以吗? @GuillaumeRacicot -
@Charles 在这种情况下,您将无法改变元素,或将它们转发给采用 const 引用或可变引用的函数。问题是,
auto&&可以正常工作,并且可以在任何地方工作,即使是在完全通用的代码中也是如此。
标签: c++ c++17 structured-bindings