c++ 17 结构化绑定

629 阅读1分钟

假定我们有一个函数 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'; 
    }
}

值得注意的是,结构体中所有成员都必须是非静态成员。