c++结构化绑定

发布于:2025-06-01 ⋅ 阅读:(23) ⋅ 点赞:(0)

author: hjjdebug
date: 2025年 05月 28日 星期三 15:57:58 CST
descrip: c++结构化绑定:


结构化绑定:
名称辨析: 名称叫绑定好还是叫解绑好?
解绑意思是原来是一个整体,现在被分成了若干个部分,所以叫解.
绑定强调的意思是. 被分解的某个变量,绑定到了整体的某个变量上. 做为整体的对象没有被分解.
按照大家的认识,还是叫结构化绑定比较好.

  1. 目的: 结构化绑定是C++17引入的特性,用于简化聚合类型的数据解构操作,

  2. 操作对象:结构化绑定允许开发者通过单个声明(一行代码)
    将复合数据对象 (如std::tuple、数组、结构体)的成员直接解构至独立的变量.

  3. 实现原理: 其本质是编译器自动生成对聚合类型成员的匿名引用或拷贝

结构化绑定主要用于访问公开成员,要访问私有成员需要结合其他技术手段

测试代码:

$ cat main.cpp
#include <iostream>
#include <tuple>
#include <map>
class Point
{
public:
	Point(int x,int y,int z):_x(x),_y(y),_z(z){}
public:
	int _x,_y,_z; //如果是私有成员,需要结合其他技术手段
};

//结构化绑定实例, 
int main()
{
	//结构体解构, 用单个的变量绑定到结构的成员变量上.
	Point p{3, 5, 8};
	auto [i1, i2, i3] = p;  
	std::cout << "i1/i2/i3:    " << i1 << ' ' << i2 << ' ' << i3 << '\n';

	//数组解包, 用单个变量,绑定到数组的元素上.
	int arr[3] = {10, 20, 30};
	auto [a, b, c] = arr; 
	std::cout<<"a/b/c:" << a << ' ' << b << ' ' <<c <<'\n';

	//元组解包, 用单个变量去绑定元组中各个元素
	std::tuple<int, std::string, float> data{42, "text", 1.2f};
	auto [num, str, val] = data; 
	std::cout<<"num/str/val:" << num << ' ' << str << ' ' <<val <<'\n';

	//遍历关联容器
	std::map<std::string, int> m{{"a",1}, {"b",2}};
	for (const auto& [key, value] : m) {  // 把map容器对象直接解构到键值对变量.
		std::cout << key << ":" << value << "|";
	}
	std::cout<<'\n';
	return 0;
}

执行结果:
$ ./tt
i1/i2/i3: 3 5 8
a/b/c:10 20 30
num/str/val:42 text 1.2
a:1|b:2|


网站公告

今日签到

点亮在社区的每一天
去签到