IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++结构化绑定 -> 正文阅读

[C++知识库]C++结构化绑定

结构化绑定(C++17引入)

利用该特性可以把以pair, tuple, array, struct的成员赋值给多个变量。在其它语言中这个特性通常叫做unpacking.

如下函数返回 dividend被 divisor除之后的倍数和余数,

std::pair<int, int> divide_remainder(int dividend, int divisor)

在c++17之前我们要以如下方式访问这个结果

const auto result =divide_remainder(16, 3);
cout<<16/3 is ”<< result.first <<” :” << result.second<< endl

使用结构化绑定编写代码

const auto [fraction, remainder] = (divide_remainder(16, 3));
cout<<16/3 is ”<< fraction <<” :” << remainder<< endl

通过结构化绑定不仅使代码简洁,因为取了明确含义的变量名,所以代码也更易读。

  • class也可以使用结构化绑定
struct employee {
	unsigned id;
	std::string name;
	std::string role;
	unsigned salary;
};
std::vector<employee> employees;
// Initialized from somewhere 
for (const auto &[id, name, role, salary] : employees) {//在范围循环中也能用
	std::cout << "Name: " << name << "Role: " << role
	 << "Salary: " << salary << std::endl;
} 
  • 固定大小的数组也能使用
int a[3]={1, 2, 3};
auto [a1, a2, a3] = a;
cout << a1 << a2 << a3 << endl;
std::array<int, 3> aa{1,2,3};
auto [aa1, aa2, aa3] = aa;

完整语法

cv-auto ref-qualifier(optional)[identifier-list]=expression;
  1. identifier-list的变量个数必须和expression中元素完全一致
  2. 可以加上引用修饰&, &&
  3. 可以加上const, volatile
  4. expression可以是std::pair,std::tuple,固定大小数组, class,
    其中class不能有私有非静态成员,并且所有非静态成员只能出现在同一个类中。
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-31 23:45:54  更:2022-03-31 23:46:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:54:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码