C++17 标准引入了一个新的结构化绑定特性,该特性最初是在 2015 年提出的,其语法外观被广泛讨论。
浏览文档后,您会立即想到它们的一些用途。
聚合分解
让我们声明一个元组:
std::tuple<int, std::string> t(42, "foo");
使用结构化绑定可以很容易地在一行中获得命名的元素副本:
auto [i, s] = t;
这相当于:
auto i = std::get<0>(t);
auto s = std::get<1>(t);
或者
int i;
std::string s;
std::tie(i, s) = t;
对元组元素的引用也可以轻松获得:
auto& [ir, sr] = t;
const auto& [icr, scr] = t;
所以我们可以使用所有成员都是公共的数组或结构/类。
多个返回值
一种从函数中获取多个返回值的便捷方法紧随其后。
还有什么?
您能否为结构化绑定提供一些其他可能不太明显的用例?它们还能如何提高 C++ 代码的可读性甚至性能?
笔记
正如评论中提到的,结构化绑定的当前实现缺乏一些特性。它们是非可变的,它们的语法不允许显式跳过聚合成员。在这里可以找到关于可变性的讨论。