[C++17] Structed Binding
Pattern
auto [var1, var2, ...] = <pair, tuple, struct, or array expression>;
Descripton
Before C++15, when we have to get some values from certain struct, we have to make struct instance and get all struct value, then assign individual variables from each members. In C++17, we can assign member's values into variables immediately. Type can be auto
, const auto
, auto&
, even auto&&
can be. The STL's basic data structs can be accessed by using struct binding. You also can use std::tie like before, when you are using non-standard struct(which doesn't have a pair, or doesn't make pair), when you have to get pair type. You can use std::ignore to manage unused members.
Example
std::pair<int, int> divide_remainder(int dividend, int divisor);
auto[fraction, remainder] = divide_remainder(16, 3);
One More Thing..
bool divide_remainder(int dividend, int divisor, int &fraction, int &remainder);
Many people use parameter as output to improve compile time. You don't have to do this nowadays. Recent compilers can deal with this.