C++ 中的结构化绑定

2025 年 5 月 24 日 | 4 分钟阅读

C++ 中,结构化绑定是 C++17 中增加的一项特性,它允许定义多个变量并将它们绑定到元组、pair 或任何其他具有公开数据成员的类或数组的元素。在处理复杂的数据结构时,此功能可以提高代码的可读性和简洁性。结构化绑定在 C++ 中使用 std::get 和 std::tie 函数

在结构化绑定出现之前,必须使用 std::getstd::tie 来访问元组或 pair 的特定成员,这可能会使代码的可理解性降低。结构化绑定提供了一种更优雅的语法来分解和提取这些结构中的值。

语法

C++ 中结构化绑定的语法包括 auto 关键字和方括号 ([])

参数

  • variable1, variable2, 等: 这些变量将被创建并绑定到右侧结构的元素:variable1, variable2, 等。
  • expression: 此表达式代表结构,例如元组、pair、数组或具有公开数据成员的用户定义类型。

结构化绑定可以轻松地分解诸如数组、元组、pair 和具有公开数据成员的用户定义类型等结构。

示例

让我们通过几个例子来说明 C++ 中的结构化绑定。

1. 使用元组的示例

输出

Value 1: 42
Value 2: 3.14
Value 3: Hello   

说明

  • 该代码包含 std::tuple 模板类和输入/输出操作所需的头文件。
  • 定义一个名为 myTuple 的元组,它包含三个组件,类型分别为 double、int 和 std::string;元素按顺序初始化为 42、3.14 和 "Hello"。
  • 应用 C++17 的结构化绑定到元组上,将值提取到变量 value1、value2 和 value3 中。
  • 将变量值输出到控制台,并附带标签 "Value 1"、"Value 2" 和 "Value 3"。
  • 返回码 0 表示程序已成功终止。

2. 使用 Pair 的示例

输出

Value 1: 42
Value 2: 3.14   

说明

  • 除了 std::pair 模板类,该代码还包含了输入/输出函数所需的头文件。
  • 声明一个名为 myPair 的 pair,它有两个组件,类型分别为 double 和 int,相应地初始化为 42 和 3.14。
  • 使用 C++17 的结构化绑定,将 pair 中的值分解到变量 value1 和 value2 中。
  • 将变量值输出到控制台,并附带 "Value 1" 和 "Value 2"。
  • 返回 0 表示程序已成功终止。

3. 使用数组的示例

输出

a: 1
b: 2
c: 3
d: 4   

说明

  • 代码中包含了输入/输出操作所需的头文件。
  • 声明一个包含四个整数的数组,名为 myArray,初始值设置为 1, 2, 3, 和 4。
  • 利用 C++17 中的结构化绑定,将数组中的值分解到变量 a, b, c, 和 d 中。
  • 将变量值打印到控制台,并附带标签 "a", "b", "c", 和 "d"。
  • 返回码 0 表示程序已成功终止。

4. 使用用户定义类型的示例

输出

x_Value: 42
y_Value: 3.14   

说明

  • 代码中包含了输入/输出操作所需的头文件。
  • 定义一个名为 MyStruct 的结构体,它有两个成员:一个 double (y) 和一个整数 (x)。
  • 创建一个 MyStruct 类型的对象,名为 myObject,并将其 x 和 y 的初始值分别设置为 42 和 3.14。
  • C++17 中的结构化绑定将结构体中的值分解到变量 xValue 和 yValue 中。
  • 将变量值输出到控制台,并附带标签 "x_Value" 和 "y_Value"。
  • 显示返回码 0 表示程序已成功终止。