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.pswp.cn/news/907296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据治理:理论、实践与未来展望(一)

文章目录 一、大数据治理的定义与重要性&#xff08;一&#xff09;定义&#xff08;二&#xff09;重要性 二、大数据治理的应用场景&#xff08;一&#xff09;金融行业&#xff08;二&#xff09;医疗行业&#xff08;三&#xff09;制造业&#xff08;四&#xff09;零售行…

AI系统化学习月计划6月计划

以下是为技术总监设计的 AI系统化学习月计划&#xff08;每天投入2小时&#xff0c;共30天&#xff09;&#xff0c;结合战略思维、技术基础、实战应用和行业趋势&#xff0c;帮助您快速掌握AI的核心知识&#xff0c;并转化为业务决策能力。 第一周&#xff1a;AI基础与战略思维…

详解MySQL调优

目录 1. SQL 语句优 1.1 避免低效查询 1.2 索引优化 1.3 分析执行计划 2. 数据库配置优化 2.1 核心参数调整 2.2 表结构与存储引擎 2.3 存储引擎选择 3. 事务与锁优化 3.1 事务控制 3.2 锁机制优化 3.3 批量操作优化 4. 其他优化手段 4.1 监控与分析工具 4.2 读写…

VScode单双引号、分号格式

1、settings.json中添加&#xff1a; 1 2 3 "prettier.semi": false, // 取消自动加分号 "prettier.singleQuote": true, // 保持单引号&#xff0c;不自动变双引号 "prettier.trailingComma": "none" // 去掉结尾的逗号 2、如上一步…

自动驾驶规划控制教程——不确定环境下的决策规划

引言:驾驭未知——不确定性下的自动驾驶决策挑战 自动驾驶汽车 (Autonomous Vehicles, AVs) 的愿景是彻底改变交通运输的面貌,提高道路安全、提升交通效率、改善驾乘体验。然而,要将这一愿景安全可靠地付诸实践,自动驾驶系统必须能够在复杂、动态且充满不确定性的真实世界…

电缆中性点概念

电缆中性点概念 电缆中性点(也称“中性点”或“中性线”)是电力系统和电气设备中一个非常重要的概念,尤其在三相电系统中。下面是对中性点概念的系统性解释。 1. 基本定义 中性点:三相电缆(A/B/C相)的电压矢量交汇点,理想情况下三相平衡时该点电压为零。对于星形(Y形…

MyBatis 动态 SQL 详解:灵活构建强大查询

MyBatis 的动态 SQL 功能是其最强大的特性之一&#xff0c;它允许开发者根据不同条件动态生成 SQL 语句&#xff0c;极大地提高了 SQL 的灵活性和复用性。本文将深入探讨 MyBatis 的动态 SQL 功能&#xff0c;包括 OGNL 表达式的使用以及各种动态 SQL 元素&#xff08;如 if、c…

嵌入式自学第三十天(5.28)

&#xff08;1&#xff09;多线程资源竞争问题&#xff1a; 互斥&#xff1a;在多线程中对临界资源的排他性访问。 解决方案&#xff1a;互斥锁 mutex互斥锁在进程pcb块&#xff0c;ret 为0说明别人在用&#xff0c;1说明空闲。 阻塞锁 man pthread_mutex_init man pthread_…

【HW系列】—web常规漏洞(SQL注入与XSS)

SQL注入与XSS攻防解析&#xff08;安全防御指南&#xff09; 一、SQL注入基础&#xff08;防御视角&#xff09; ​​1. 简介​​ SQL注入是一种通过构造非预期SQL语句操纵数据库的攻击技术。作为开发者&#xff0c;需重点关注输入验证与查询安全&#xff0c;建立全流量监测…

Accelerate 2025北亚巡展正式启航!AI智御全球·引领安全新时代

近日&#xff0c;网络安全行业年度盛会Accelerate 2025北亚巡展正式在深圳启航&#xff01;智库专家、产业领袖及Fortinet高管、产品技术团队和300余位行业客户齐聚一堂&#xff0c;围绕“AI智御全球引领安全新时代”主题&#xff0c;共同探讨AI时代网络安全新范式。大会聚焦三…

RAG系统构建之嵌入模型性能优化完整指南

导读&#xff1a;在企业级RAG系统的实际部署中&#xff0c;您是否遇到过这样的困扰&#xff1a;嵌入计算成本不断攀升&#xff0c;API调用频繁触及限制&#xff0c;而系统响应速度却始终达不到用户期望&#xff1f;这些看似分散的问题&#xff0c;实际上都指向同一个技术核心&a…

python 自动生成不同行高的word

python 自动生成不同行高的word # -*- coding: utf-8 -*- from docx import Document from docx.shared import Cm, Pt, Inches from docx.oxml import OxmlElement from docx.oxml.ns import qn from docx.enum.text import WD_ALIGN_PARAGRAPHclass DynamicTableGenerator:d…

如何训练意志力

设定清晰的目标 目标需要是具体的&#xff0c;可实现的&#xff0c;有时间限制的。比如不要说“我要锻炼”&#xff0c;而是改成“每周跑步3次&#xff0c;每次30分钟”。 从小事开始 起步通常都是困难的&#xff0c;一开始定一个很大很复杂的任务也超出了自己的能力&#x…

FastAPI 依赖注入

依赖注入常用于以下场景&#xff1a; 共享业务逻辑&#xff08;复用相同的代码逻辑&#xff09; 共享数据库连接 实现安全、验证、角色权限 等…… 上述场景均可以使用依赖注入&#xff0c;将代码重复最小化。 创建依赖项 依赖项就是一个函数&#xff0c;且可以使用与路…

接口幂等性原理与方案总结

文章目录 接口幂等概念典型场景核心解决方案一锁二判三更新 方案选型对比 接口幂等概念 定义&#xff1a;无论调用接口多少次&#xff0c;对系统的影响与单次调用一样 范畴&#xff1a;在后端开发中&#xff0c;通常更关注写接口的幂等&#xff0c;因为写接口才会对系统数据造…

【已解决】windows gitbash 出现CondaError: Run ‘conda init‘ before ‘conda activate‘

在 Git Bash 中执行&#xff1a; source /c/Users/你的用户名/miniconda3/etc/profile.d/conda.sh # 注意填入你自己的路径 conda init bash关闭并重新打开 Git Bash 终端。测试激活环境&#xff1a; conda activate your_env_name注意事项 要把上述命令中的 你的用户名 替…

软件包管理系统的架构与生态机制

文章目录 前言一、总结二、如何上传自己的软件包 前言 在日常软件开发中&#xff0c;我们经常使用诸如apt install, pip install, npm install之类的命令&#xff0c;但有一个问题是&#xff0c;这些下载命令是从哪里下载的这些软件包&#xff0c;以及我们是否能上传自己的代码…

Java线程池管理最佳实践(设计模式)

引言 在多线程编程中&#xff0c;线程池是一种非常重要的资源管理工具。合理使用线程池可以显著提高系统性能&#xff0c;避免频繁创建和销毁线程带来的开销。今天&#xff0c;我将为大家深入分析一个实用的ThreadPoolManager实现&#xff0c;它来自com.kingdee.eas.util包&am…

4.8.2 利用Spark SQL计算总分与平均分

在本次实战中&#xff0c;我们的目标是利用Spark SQL计算学生的总分与平均分。首先&#xff0c;我们准备了包含学生成绩的数据文件&#xff0c;并将其上传至HDFS。接着&#xff0c;通过Spark的交互式编程环境&#xff0c;我们读取了成绩文件并将其转换为结构化的DataFrame。然后…

HTML 文件路径完全指南:相对路径、绝对路径解析与引用技巧

一、为什么必须学会文件路径&#xff1f;—— 网页引用资源的 “地址规则” 在 HTML 中&#xff0c;引用图片、CSS、JS 等外部文件时&#xff0c;必须通过文件路径告诉浏览器资源的位置。路径错误会导致资源无法加载&#xff08;页面出现 broken image 图标或样式丢失&#xf…