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

C++20结构化绑定应用实例(二百五十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:C++20结构化绑定应用实例。

2.C++20结构化绑定介绍

  • C++20 引入了一种新的特性:结构化绑定(Structured Binding),这是一种简化数组和结构体(struct)初始化的方式。结构化绑定允许你将数组或结构体的元素或成员分别绑定到新的变量名,从而使得代码更加清晰和易读。
  • 结构化绑定主要针对数组和结构体类型的初始化。当你声明一个数组或结构体变量,并给它赋初值时,你可以使用结构化绑定来将初值中的每个元素或成员分别绑定到一个新的变量名。这样,你就可以在后续的代码中使用这些新绑定的变量名,而不是直接使用初值中的元素或成员名。
  • 结构化绑定的基本语法如下:

auto [var1, var2, var3, …] = arr_or_struct;
其中,arr_or_struct 是一个数组或结构体类型的变量,var1, var2, var3, … 是新的变量名,它们分别对应 arr_or_struct 中的每个元素或成员。

  • 结构化绑定有一些使用上的限制。首先,它只能用于自动类型(即编译时无法确定具体类型的变量),不能用于静态类型或模板类型。其次,结构化绑定不能用于函数参数或返回类型,也不能用于类(class)的成员变量或方法。此外,结构化绑定不能用于初始化一个结构体或类的对象,只能用于初始化数组或结构体变量。
  • 结构化绑定在实际编程中有很多应用场景。例如,当你需要处理一个包含多个元素的数组时,你可以使用结构化绑定将数组中的每个元素分别绑定到一个新的变量名,从而在后续的代码中更容易操作这些元素。同样,当你定义一个结构体类型,并给它赋初值时,你可以使用结构化绑定将初值中的每个成员分别绑定到一个新的变量名,从而使得代码更加清晰和易读。
  • 它使得数组和结构体类型的初始化更加方便和直观。通过使用结构化绑定,你可以将数组或结构体的元素或成员分别绑定到新的变量名,从而使得代码更加清晰和易读,同时也提高了编程效率。

3.C++普通用法

#include <iostream>
#include <memory>
using namespace std;int set(int a, int b, int c, int d, int e, int f){printf("%s(), line = %d\n",__FUNCTION__,__LINE__);return 0;
}int main(){set(1, 2, 3, 4, 5, 6);
}

4.c++20结构化绑定用法示例

v1.0版本

#include <iostream>
#include <memory>
using namespace std;struct SetParams {int a;int b;int c;int d;int e;int f;
};int set(int a, int b, int c, int d, int e, int f){printf("---->%s(), line = %d\n",__FUNCTION__,__LINE__);return 0;
}void  set(SetParams& s) {set(s.a, s.b, s.c, s.d, s.e, s.f);
}int main(){SetParams mSetParams = {1,2,3,4,5,6};  set(mSetParams);
}

v2.0版本

#include <iostream>
#include <memory>
using namespace std;struct SetParams {int a;int b;int c;int d;int e;int f;
};int set(int a, int b, int c, int d, int e, int f){printf("%s(), line = %d\n",__FUNCTION__,__LINE__);return 0;
}void  set(SetParams& s) {set(s.a, s.b, s.c, s.d, s.e, s.f);
}int main(){SetParams *mSetParams;mSetParams = new SetParams{1,2,3,4,5,6};set(*mSetParams);
}

v3.0版本

#include <iostream>
#include <memory>
using namespace std;struct SetParams {int a;int b;int c;int d;int e;int f;
};int set(int a, int b, int c, int d, int e, int f){printf("%s(), line = %d\n",__FUNCTION__,__LINE__);return 0;
}void  set(SetParams& s) {set(s.a, s.b, s.c, s.d, s.e, s.f);
}int main(){std::unique_ptr<SetParams> mSetParams; mSetParams = std::unique_ptr<SetParams>{new SetParams{1,2,3,4,5,6}};set(*mSetParams);
}
http://www.lryc.cn/news/279766.html

相关文章:

  • 改进YOLOv8注意力系列四:结合中心化特征金字塔EVCBlock、大核卷积注意力LKA_Attention、全局注意力MobileViTAttention
  • idea中使用Lombok 失效,@Slf4j 找不到符号的解决办法
  • MySQL修炼手册8:约束与完整性:保证数据的一致性
  • React入门 - 03(初识 React 组件和 JSX)
  • 华为OD机试 - 反射计数(Java JS Python C)
  • Linux系统中使用systemctl命令控制软件的启动和关闭
  • 2024年01月微软更新Bug 已解决 !Explorer.EXE 提示:Windows无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。
  • Qt/QML编程学习之心得:slider(34)
  • 使用metricbeat 监控多ES集群
  • 阿里云服务器+宝塔 (尝试部署一个最简单的静态页面)
  • 每日一题——LeetCode1160.拼写单词
  • 物联网协议Coap之Core和NetWork简介
  • Java SE入门及基础(10)
  • Docker五部曲之二:Docker引擎
  • 简单说一下原型与原型链
  • 11Spring IoC注解式开发(上)(元注解/声明Bean的注解/注解的使用/负责实例化Bean的注解)
  • k8s 部署Jenkins项目
  • #每日一题#力扣#2085.统计出现过一次的公共字符串
  • Python系列(1):简洁优雅,功能强大的编程语言
  • HarmonyOS应用开发学习笔记 arkTS自定义弹窗(CustomDialog)简单使用 arkTS弹出框回调、监听
  • RabbitMQ(六)消息的持久化
  • mybatisplus配置
  • node-sass@4.7.2 postinstall: `node scripts/build.js`
  • pyDAL一个python的ORM(9) pyDAL的嵌套查询
  • 融资项目——EasyExcel操作Excel文件
  • OAI openair3-NAS-UE-EMM代码解读(续)
  • SQL-条件查询与聚合函数的使用
  • Qt移植曲线显示
  • 基于springboot生鲜交易系统源码和论文
  • vue中鼠标拖动触发滚动条的移动