跳转至

结构化绑定

  • 功能:解构数组或元组或结构并绑定,作用与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 左值
}