结构化绑定
- 功能:解构数组或元组或结构并绑定,作用与
std::tie
类似,但比其适用范围更广。
- 规则:
- 数量相等:标识符数量等于数组或元组或结构成员元素数量
- 类非静态数据成员必须为公用,可以有静态成员
class S {
static int i2;
public:
int x1 = 2;
volatile double y1;
};
int S::i2 = 3;
S f() { return S(); };
int main()
{
//1 绑定数组
int a1[2] = { 1,2 };
auto [x, y] = a1; // 创建 e[2],复制 a1 到 e,然后 x 指代 e[0],y 指代 e[1]
auto& [xr, yr] = a1; // xr 指代 a1[0],yr 指代 a1[1]
//2 绑定元组
float x2{};
char y2{};
int z{};
std::tuple<float&, char&&, int> tpl(x2, std::move(y2), z);
const auto& [a, b, c] = tpl;
// a 指名指代 x2 的结构化绑定;decltype(a) 为 float&
// b 指名指代 y2 的结构化绑定;decltype(b) 为 char&&
// c 指名指代 tpl 的第 3 元素的结构化绑定;decltype(c) 为 const int&
//3 绑定结构数据
const auto [x3, y3] = f(); // x3 是标识 2 位位域的 const int 左值
// y3 是 const volatile double 左值
}