假定我们有一个函数 divide_remainder,它的作用是接受一个被除数和除数,然后对这两个数做除法,并返回结果的整数部分和余数部分。
函数声明如: std::pair<int, int> divide_remainder(int dividend, int divisor);
这时,我们可以通过下列方式访问其中的值
const auto result (divide_remainder(16, 3));
std::cout << "16 / 3 is " << << result.first << " with a remainder of " << result.second << '\n';
但是在c++ 17中,我们可以通过结构化绑定的语法简化代码,简化后的代码如下
auto [fraction, remainder] = divide_remainder(16, 3);
std::cout << "16 / 3 is " << fraction << " with a remainder of " << remainder << '\n';
同样的,结构化绑定也可以用于自定义结构体上 设结构体如下:
struct employee{
unsigned id;
std::string name;
std::string role;
unsigned salary;
};
可以像下面这样进行结构化绑定
int main()
{
std::vector employees{ /* Initialized from somewhere */ };
for (const auto &[id, name, role, salary] : employees)
{
std::cout << "Name: " << name << "Role: " << role << "Salary: " << salary << '\n';
}
}
值得注意的是,结构体中所有成员都必须是非静态成员。