C++ 20新特性之结构化绑定

💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。

什么是结构化绑定

        在C++ 20出现之前,当我们需要访问一个结构体或类的多个成员时,通常使用.或->操作符。对于复杂的数据结构,这种访问方式往往会显得冗长,也难以理解。C++ 20中引入的结构化绑定允许我们直接从一个聚合类型(比如:tuple、struct、class等)中提取出多个成员,并为它们分别命名。这一特性大大简化了对复杂数据结构的访问方式,使代码更加清晰、易读。

如何使用

        使用结构化绑定比较简单,在声明变量时使用auto关键字和&符号,并用{}包含聚合类型的各个成员即可。其中,&符号为可选,表示引用。

        首先,我们来看一下绑定元组的情况。在下面的示例代码中,我们通过std::make_tuple创建了一个包含人员信息的元组,并使用结构化绑定一次性解包为name、age两个变量。通过这种方式,数据访问变得简洁而高效。

#include <iostream>
#include <tuple>int main()
{// 绑定到元组auto person = std::make_tuple("Mike", 18);const auto& [name, age] = person;std::cout << "Name: " << name << ", Age: " << age << std::endl;return 0;
}

        接下来,我们学习下绑定数组和结构体的情况。在下面的示例代码中,我们将数组pnNumber赋值给对应的变量a、b和c,同时将结构体person赋值给对应的变量name和age。

#include <iostream>
#include <string>struct TPersonInfo
{std::string name;int age;
};int main()
{// 绑定到数组int pnNumber[] = {66, 77, 88};auto [a, b, c] = pnNumber;std::cout << a << ", " << b << ", " << c << std::endl;// 绑定到结构体TPersonInfo person{"Jack", 25};auto& [name, age] = person;std::cout << "Name: " << name << ", Age: " << age << std::endl;return 0;
}

        除了上面介绍的这些,结构化绑定还支持直接绑定到匿名元组、匿名结构体和匿名联合。在下面的示例代码中,我们使用lambda表达式创建了一个临时的元组,并通过结构化绑定到匿名变量a和b上,避免了额外的变量声明。

#include <iostream>int main()
{// 绑定到匿名元组auto [a, b] = []{ return std::make_tuple(66, 99); }();std::cout << a << ", " << b << std::endl;return 0;
}

注意事项

        1、结构化绑定只能用于聚合类型,不能用于基本数据类型。

        2、结构化绑定的变量是只读的,不能通过它们来修改原始数据。如果确实需要修改原始数据,可以使用引用或直接访问原始数据。

        3、绑定顺序必须与聚合类型中元素的声明顺序保持一致。

        4、如果不关心聚合类型中的某些成员,可以使用下划线_占位符来忽略不需要的成员。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21769.shtml

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

相关文章

二、Nginx目录结构与基本运行原理

目录 一、目录结构 二、运行原理 一、目录结构 我们使用tree 命令查看nginx的目录。如果tree 命令失效&#xff0c;需要安装tree工具 [rootlocalhost local]# yum install -y tree[rootlocalhost /]# tree /usr/local/nginx /usr/local/nginx ├── client_body_temp # PO…

C语言 | Leetcode C语言题解之第129题求根节点到叶节点数字之和

题目&#xff1a; 题解&#xff1a; int sumNumbers(struct TreeNode* root) {if (root NULL) {return 0;}int sum 0;struct TreeNode* nodeQueue[2000];int numQueue[2000];int leftQueue 0, rightQueue 0;nodeQueue[rightQueue] root;numQueue[rightQueue] root->v…

Vue——初识组件

文章目录 前言页面的构成何为组件编写组件组件嵌套注册 效果展示 前言 在官方文档中&#xff0c;对组件的知识点做了一个很全面的说明。本篇博客主要写一个自己的案例讲解。 vue 官方文档 组件基础 页面的构成 说到组件之前&#xff0c;先大致说明下vue中页面的构成要素。 在…

手写数据集minist基于pytorch分类学习

1.Mnist数据集介绍 1.1 基本介绍 Mnist数据集可以算是学习深度学习最常用到的了。这个数据集包含70000张手写数字图片&#xff0c;分别是60000张训练图片和10000张测试图片&#xff0c;训练集由来自250个不同人手写的数字构成&#xff0c;一般来自高中生&#xff0c;一半来自工…

MTU相关随笔

一、MTU的概念 MTU&#xff08;最大传输单元&#xff09;&#xff1a;用来通知对方所能接受数据服务单元的最大尺寸&#xff0c;说明发送方能够接受的有效载荷大小。MTU是包或帧的最大长度&#xff0c;一般以字节记&#xff0c;如果过大在碰到路由器时会被拒绝转发&#xff0c…

SpringBoot项目本地运行正常,jar包运行时前端报错403:No mapping for......

SpringBoot项目本地运行正常&#xff0c;jar包运行时前端报错403&#xff1a;No mapping for… 提示&#xff1a;在部署jar包到云服务器上之前&#xff0c;一定要在本地运行jar包&#xff0c;查看前端代码是否运行正常&#xff0c;若报错的话可以节省很多时间 方式&#xff1a;…

SQL 如何获取A列相同但是B列不同的数据项

用户表里有两个字段&#xff1a;部门和职位。一个部门可能对应多个职位&#xff0c;多个部门也可能都有同一职位。比如&#xff1a; 部门 职位 财务 部长 财务 副部长 财务 会计 财务 职员 编辑 部长 编辑 副部长 编辑 主编 编辑 副主编 现在想通过筛选&#xff0c;获取职位名称…

友顺科技(UTC)分立器件与集成IC产品选型和应用

友顺科技股份有限公司成立于1990年&#xff0c;是全球领先的集成电路与功率半导体厂商 ,集团总部位于台北&#xff0c;生产基地位于福州、厦门。 友顺科技具有完整模拟组件产品线&#xff0c;其中类比IC涵盖各种稳压器、PWM控制IC, 放大器、比较器、逻辑IC、Voltage Translato…

基于飞腾 D2000 8 核+ 32G DDR+板载 6 千兆电口+ 4 千兆光口高性能网络安全主板

第一章、产品介绍 1.1 产品概述 XM-D2000GW是一款基于飞腾 D2000 8 核X100 桥片高性能网络安全主板&#xff0c;D2000 为飞腾首款支持 8 核桌面平 台处理器&#xff0c;支持双通道 DDR4-2666 内存&#xff0c;芯片内置国密 SM2/SM3/SM4/SM9 加速引擎&#xff0c;支持单精度、双…

gitee和github的协同

假设gitee上zhaodezan有一个开发库&#xff0c;但是从andeyeluguo上拉取最新的&#xff08;从github上同步过来最新的&#xff09; git remote add dbgpt_in_gitee https://gitee.com/andeyeluguo/DB-GPT.git remote -v git pull --rebase dbgpt_in_gitee main 有冲突可能需要…

使用Scapy框架分析HTTP流量

网络流量分析是网络安全和管理中的一个重要部分。通过分析网络流量&#xff0c;我们可以检测异常行为、诊断网络问题以及提升网络性能。本文将介绍如何使用Scapy框架分析HTTP流量。我们将从tcpdump导出的PCAP文件中提取HTTP流量&#xff0c;并进行简单的分析。 PCAP文件格式 …

【调试笔记-20240603-Linux-在 OpenWrt-23.05 上运行 ipkg-build 生成. ipk 安装包】

调试笔记-系列文章目录 调试笔记-20240603-Linux-在 OpenWrt-23.05 上运行 ipkg-build 生成. ipk 安装包 文章目录 调试笔记-系列文章目录调试笔记-20240603-Linux-在 OpenWrt-23.05 上运行 ipkg-build 生成. ipk 安装包 前言一、调试环境操作系统&#xff1a;Windows 10 专业…

Android11 AudioTrack和Track建立联系

应用程序创建AudioTrack时&#xff0c;导致AudioFlinger在播放线程中&#xff0c;创建Track和其对应。那它们之间是通过什么来建立联系传递数据的&#xff1f;答案是共享内存。 创建Track时&#xff0c;导致其父类TrackBase的构造函数被调用 //frameworks/av/services/audiofl…

数字化时代还需要传统智慧图书馆吗

尽管以电子阅览室代表的数字化时代带来了许多便利和创新&#xff0c;但传统智慧图书馆依然具有重要的价值和意义。以下是一些原因&#xff1a; 1. 保存历史文化&#xff1a;传统智慧图书馆是保存历史文化遗产的重要载体&#xff0c;收藏了许多珍贵的古籍、手稿和纸质图书&#…

Prop 和 State 有什么区别?

Prop (属性) 和 State (状态) 是 React 中两个非常重要的概念,它们之间有以下几个主要区别: 来源:Prop 是父组件传递给子组件的数据。State 是组件内部维护的数据。可变性:Prop 是不可变的(immutable)。一旦父组件传递给子组件,子组件就无法直接修改 prop。State 是可变的(mut…

基于 Amazon EC2 快速部署 Stable Diffusion WebUI + chilloutmax 模型

自2023年以来&#xff0c;AI绘图已经从兴趣娱乐逐渐步入实际应用&#xff0c;在众多的模型中&#xff0c;作为闪耀的一颗明星&#xff0c;Stable diffusion已经成为当前最多人使用且效果最好的开源AI绘图软件之一。Stable Diffusion Web UI 是由AUTOMATIC1111 开发的基于 Stabl…

力扣2090.半径为k的子数组平均值

力扣2090.半径为k的子数组平均值 accumulate函数&#xff1a;求一段和(起始迭代器&#xff0c;终止迭代器&#xff0c;初始值) class Solution {public:vector<int> getAverages(vector<int>& nums, int k) {int n nums.size();vector<int> res(n,-1…

Java密码复杂度实现

在Java中实现密码复杂度验证&#xff0c;通常需要考虑以下几个因素&#xff1a; 密码长度&#xff1b; 包含大写字母&#xff1b; 包含小写字母&#xff1b; 包含数字&#xff1b; 包含特殊字符&#xff08;可选&#xff09;。 以下是一个简单的Java类&#xff0c;用于验…

江苏服务器租用的优势有哪些?

随着互联网科技的快速发展&#xff0c;网络行业也逐渐开始兴起&#xff0c;而网络服务则离不开服务器的使用&#xff0c;那么江苏服务器租用对于其它地区来说都哪些优势呢&#xff1f; 江苏省是经济发展比较迅速的地区&#xff0c;所以江苏的企业对于网络方面的发展也是十分快速…

vue-cl-service不同环境运行/build配置

概述 在项目开发过程中&#xff0c;同一个项目在开发、测试、灰度、生产可能需要不同的配置信息&#xff0c;所以如果能根据环境的不同来设置参数很重要。 vue项目的vue-cl-service插件也支持不同环境的不同参数配置和打包。 实现 新建不同环境配置文件 vue项目中的配置文件以…