概述
- 结构化绑定是C++17引入的一种新语法,用于对元组的拆解,提高开发效率和代码可读性。
- 使用结构化绑定可以减少中间变量,降低程序员的命名负担。
- 语法格式为:
auto [变量1, 变量2] = 变量,编译器会自动推导变量1和变量2的类型。 - 结构化绑定中的变量个数,即
[]中的变量个数,必须与元组中能够拆分出的变量个数相同,且这些变量必须在当前作用域中未声明。
使用
在pair中使用
pair可以将两个变量组合成一个变量,而无需定义结构体或类。
|
|
在tuple中使用
tuple可以将多个变量组合成一个变量,不局限于两个,但使用起来较为复杂。
|
|
- 通过上面两个案例,可以发现结构化绑定的便捷之处。
自定义结构体中使用
- 在结构体中也可以使用结构化绑定,结构体中声明变量的顺序与
[]中变量的顺序相同。
|
|
数组中使用
- 结构化绑定还可以用于数组,但不是很常用。
|
|
结构化绑定的引用
- 结构化绑定还可以与引用结合,实现对原变量值的修改。
|
|
map的范围for中使用
- 在
map容器中,存储的每一个元素都是键值对,使用范围for循环遍历时可以进行结构化绑定,提高编程效率。
|
|
元素类型为pair的vector范围遍历for
- 如果
vector容器中存储的元素类型为pair或tuple,也可以使用结构化绑定简化开发。
|
|
注意事项
结构化绑定的嵌套
- 在C++17中,结构化绑定不允许嵌套,否则编译不通过。以下以
unordered_map为例,键为int类型,值为pair类型。
|
|
数组长度必须为常量
- 从C99开始,定义数组时长度可以使用变量(MSVC编译器除外)。但是,如果要进行结构化绑定,就不能使用变量定义数组长度。
|
|