C++ 17: 结构化绑定(Structured Binding)

Aug 29, 2022 • 预计阅读时间 1 分钟

结构化绑定(Structured Binding)是 C++ 17 的新特性,是一个很方便的语法糖。

typedef struct Rect {
    double x;
    double y;
    double width;
    double height;
} Rect;

Rect bounds{ 100, 100, 300, 400 };

auto [ x, y, w, h ] = bounds;

以上代码中,auto [] 就是结构化绑定的语法,x, y, w, h 4 个变量名就和结构体中的字段相对应。

x, y, w, h 的修改不会影响到 bounds 的值。

如果要影响 bounds 中的值,需要使用引用的形式:auto &[]

auto &[ x, y, w, h ] = bounds;
x = 200; // 相当于 bounds.x = 200

在枚举 stl 容器中的数据时,使用结构化绑定可以省略一个变量命名:

std::vector<Rect> list = {
    { 10, 10, 300, 200 },
    { 20, 20, 400, 300 },
    { 30, 30, 600, 400 },
    { 40, 40, 800, 600 }
};

for (const auto &[x, y, w, h] : list) {
    printf("x:%f, y:%f, w:%f, h:%f", x, y, w, h);
}

参考资料

https://en.cppreference.com/w/cpp/language/structured_binding

C++
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

SwiftPM 编译命令参数

Swift 调用私有方法