结构化绑定(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