当前位置: 首页 > java >正文

c++结构化绑定


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|

http://www.xdnf.cn/news/9486.html

相关文章:

  • Python应用while循环猜数字
  • webpack的安装
  • 签约!京东云与契约锁达成战略合作,携手共推全程数智化解决方案
  • 【计算机网络】IPv6和NAT网络地址转换
  • 【Prometheus+Grafana实战:搭建监控系统(含告警配置)】
  • Vue开发系列——Vue中常见实现区别及Vue.js 模板编译原理
  • EC800GCN 华系列 DTU 开发板介绍
  • 基于 Flink+Paimon+Hologres 搭建淘天集团湖仓一体数据链路
  • 家政小程序开发,开启便捷生活新篇章
  • Visual Studio 的下载安装
  • 常用 Linux 命令---服务器开发和运维相关命令
  • JVM内存溢出:诊断处理与预防全攻略
  • 【pycharm】如何连接远程仓库进行版本管理(应用版本)
  • ModbusTcp协议
  • LiveQing 视频点播流媒体 RTMP 推流服务功能:搭建 RTMP 视频流媒体服务详细指南
  • xcode卡死问题,无论打开什么程序xcode总是在转菊花,重启电脑,卸载重装都不行
  • 设计模式之单例模式
  • MySQL MVCC(多版本并发控制)详解
  • 使用 Frida 增强 FART:实现更强大的 Android 脱壳能力
  • 逛网站看到个场景题,如何防止重复下单
  • react diff 算法
  • Uniapp+UView+Uni-star打包小程序极简方案
  • 【Fifty Project - D32】
  • 工业5.0视域下的医疗AI行业未来发展方向研究
  • TCXO温度补偿振荡器的概述和补偿方法
  • WES(二)——数据预处理
  • 前端使用 spark-md5 实现大文件切片上传
  • 68元开发板,开启智能硬件新篇章——明远智睿SSD2351深度解析
  • 黑马程序员C++核心编程笔记--3 函数高级
  • 技术视界 | 打造“有脑有身”的机器人:ABC大脑架构深度解析(下)