将结构体或tuple中的成员绑定到变量上写法
时间: 2024-03-28 12:42:27 浏览: 90
详解C语言的结构体中成员变量偏移问题
5星 · 资源好评率100%
C++17引入了结构化绑定(Structured Bindings)特性,可以将结构体或tuple中的成员绑定到变量上,使得代码更简洁、易读。例如,以下是使用结构化绑定获取结构体中的成员变量的示例:
```c++
#include <iostream>
#include <tuple>
struct Person {
std::string name;
int age;
};
int main() {
Person p = {"Alice", 20};
auto [name, age] = p; // 结构化绑定
std::cout << "Name: " << name << ", Age: " << age << std::endl;
return 0;
}
```
输出结果为:Name: Alice, Age: 20。
在上述代码中,使用auto [name, age] = p语句将结构体p中的成员变量name和age分别绑定到变量name和age上,从而可以直接使用这些变量。如果需要修改结构体中的成员变量,可以将结构体变量p声明为引用类型,例如:
```c++
Person p = {"Alice", 20};
auto& [name, age] = p; // 结构化绑定
name = "Bob"; // 修改结构体中的成员变量
std::cout << "Name: " << p.name << ", Age: " << p.age << std::endl;
```
输出结果为:Name: Bob, Age: 20。
除了结构体,也可以使用结构化绑定获取tuple中的元素。例如:
```c++
std::tuple<int, float, std::string> t = {1, 3.14, "hello"};
auto [x, y, z] = t; // 结构化绑定
std::cout << "x: " << x << ", y: " << y << ", z: " << z << std::endl;
```
输出结果为:x: 1, y: 3.14, z: hello。
需要注意的是,结构化绑定只能用于结构体和tuple等类型,不能用于其他任何类型。此外,结构化绑定还有一些限制,例如不能同时绑定到相同的变量上等。
阅读全文