[C++17] Structed Binding

in #it6 years ago (edited)

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.

Coin Marketplace

STEEM 0.30
TRX 0.12
JST 0.034
BTC 64136.70
ETH 3128.20
USDT 1.00
SBD 3.94