结构化绑定定义及用法
所谓"结构化绑定", 即将指定的名称绑定到初始化器的子对象或元素上。比如有如下结构体:
1 2 3 4 |
struct Student { int age; std::string name; }; |
那么有如下写法,直接把该结构体的成员绑定到新的变量名上:
1 2 |
Student st{18, "Tom"}; auto [a, n] = st; //auto a=n.age, auto n=s.name |
结构化绑定支持的方式:
1 2 3 |
auto [ident-list] = expression; auto [ident-list] {expression}; auto [ident-list](expression); |
auto
前后可以使用 const
alignas
和 &
修饰。
结构化绑定可以用在 数组(array)、类元组(tuple-like)和成员变量上(data members)。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
int tm[3] = {1949, 10, 1}; auto [y, m, d] = tm; std::cout << m << "/" << d << "/" << y << std::endl; std::map<int, std::string> mp = {{1, "Name"}, {2, "Age"}}; for (const auto& [k, v] : mp) { std::cout << k << ": " << v << std::endl; } auto [it, rst] = mp.insert({1, "Type"}); if (!rst) { std::cout << "Insert Error" << std::endl; } |
这么做的好处是使得代码结构更清晰,简洁易读。