存档

文章标签 ‘c++17’

C++17 新特性:结构化绑定

2024/03/29 2,917

结构化绑定定义及用法

所谓”结构化绑定”, 即将指定的名称绑定到初始化器的子对象或元素上。比如有如下结构体:

struct Student {
  int age;
  std::string name;
};

那么有如下写法,直接把该结构体的成员绑定到新的变量名上:

Student st{18, "Tom"};
auto [a, n] = st;  //auto a=n.age, auto n=s.name

结构化绑定支持的方式:

auto [ident-list] = expression;
auto [ident-list] {expression};
auto [ident-list](expression);

auto 前后可以使用 const alignas& 修饰。

结构化绑定可以用在 数组(array)、类元组(tuple-like)和成员变量上(data members)。

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;
}

这么做的好处是使得代码结构更清晰,简洁易读。

继续阅读