C++17 标准引入了新的结构化绑定 http://en.cppreference.com/w/cpp/language/structured_binding功能,最初是proposed http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0144r0.pdf2015年,其句法出现被广泛讨论过 https://stackoverflow.com/questions/40333000/why-do-c17-structured-bindings-not-use later.
当您查看文档时,您会立即想到它们的一些用途。
骨料分解
让我们声明一个元组:
std::tuple<int, std::string> t(42, "foo");
通过一行中的结构化绑定可以轻松获得命名的元素副本:
auto [i, s] = t;
这相当于:
auto i = std::get<0>(t);
auto s = std::get<1>(t);
or
int i;
std::string s;
std::tie(i, s) = t;
对元组元素的引用也可以轻松获得:
auto& [ir, sr] = t;
const auto& [icr, scr] = t;
因此,我们可以使用所有成员都是公共的数组或结构/类。
多个返回值
从上面可以立即得出一种从函数获取多个返回值的便捷方法。
还有什么?
您能否为结构化绑定提供一些其他可能不太明显的用例?他们还能如何提高 C++ 代码的可读性甚至性能?
Notes
正如评论中提到的,结构化绑定的当前实现缺乏一些功能。它们是非可变的,并且它们的语法不允许显式跳过聚合成员。Here https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/CcOGSKEoQa0人们可以找到关于可变性的讨论。