C++ 20新特性之语法糖

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

概述

        C++ 20中引入了一些简化编程工作的语法上的新特性,我们暂且美其名曰:“语法糖”。下面,我们将对这些“语法糖”一一进行介绍。

语法糖1:using enum

        假如有一个颜色的枚举类型,其定义如下。

enum class Color
{Red,Green,Blue,Black,Purple
};

        在C++ 20之前,如果我们想要使用这个枚举类的某个成员,通常需要像下面这样写。

Color clr = Color::Green;

        在C++ 20中,引入了using enum。它提供了一种更简洁的方式来在作用域中引入枚举类型的成员,使得在使用枚举成员时,不需要再添加前缀,从而简化了代码的编写。

// 引入Color枚举的所有成员到当前作用域
using enum Color;// 不需要再写前缀Color::
Color favoriteColor = Green;

语法糖2:Lambda的默认捕获

        在 C++ 20之前,Lambda表达式的捕获子句需要显式地列出要捕获的变量(通过 [&]、[=] 或通过逐个列出变量的方式来捕获)。在C++ 20中,允许我们使用默认捕获作为捕获子句的一部分,并在需要时显式地覆盖这些默认值。

        在下面的示例代码中,我们定义了一个Lambda函数,并将其赋值给pFunc。[=, &nNumber2]捕获列表中,=表示除了明确指出的nNumber2之外,其他外部变量都按值被捕获,而&nNumber2表示nNumber2按引用被捕获。mutable关键字使得Lambda内的代码可以修改按值捕获的变量副本。在Lambda函数内部,nNumber1++尝试增加按值捕获的nNumber1的副本的值。由于Lambda被声明为mutable,这个操作是允许的,但仅修改了副本,不影响外部的nNumber1。nNumber2++直接增加了按引用捕获的nNumber2的值,这会影响到外部的nNumber2。最终,nNumber1的值为66,nNumber2的值为100。

#include <iostream>
using namespace std;int main()
{int nNumber1 = 66;int nNumber2 = 99;auto pFunc = [=, &nNumber2]() mutable {nNumber1++;nNumber2++;};pFunc();// 输出:66cout << nNumber1 << endl;// 输出:100cout << nNumber2 << endl;return 0;
}

语法糖3:requires关键字

        C++ 20中引入了requires关键字,它是约束和概念特性的核心组成部分。通过使用requires,我们可以定义一个条件。该条件必须为真,以便模板参数或函数参数满足特定的要求。这有助于在编译时捕获错误,提高代码的可读性和可维护性。

#include <iostream>
#include <concepts>
using namespace std;// requires后面的大括号内声明了对类型T的要求,即类型T的两个实例必须能够相加
template <typename T>
concept Addable = requires(T a, T b)
{a + b;
};template <Addable T>
T Add(T x, T y)
{return x + y;
}int main()
{// 由于整型支持加法,故下面的调用是合法的cout << Add(66, 99) << endl;// 如果尝试使用不支持加法操作的类型,则编译会报错// cout << Add("Hello", "Hope") << endl;return 0;
}

语法糖4:常用的数学常量

        C++ 20通过<numbers>头文件引入了一系列的数学常量,这些常量提供了精确的浮点数表示,使得在需要高精度的场景下非常有用。

#include <iostream>
#include <numbers>
using namespace std;int main()
{// 圆周率cout << numbers::pi_v<double> << endl;// 自然对数的底cout << numbers::e_v<double> << endl;// 黄金比例cout << numbers::phi_v<double> << endl;// 2的对数的倒数cout << numbers::log2e_v<double> << endl;// 10的对数的倒数cout << numbers::log10e_v<double> << endl;return 0;
}

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

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

相关文章

chkstk.asm未经处理的异常

【1】异常图片 【2】异常原因 运行程序时&#xff0c;程序尝试分配的内存超出了当前线程的堆栈边界 【3】定位&#xff1a;如下图&#xff0c;数组分配过大

什么悬挂指针,如何避免(C/C++)

悬挂指针&#xff08;Dangling Pointer&#xff09; 悬挂指针是指向已经被释放或者不再存在的内存区域的指针。当程序尝试使用这样的指针访问或修改已释放的内存时&#xff0c;会导致未定义行为&#xff0c;通常是程序崩溃或数据损坏。 示例代码&#xff08;C&#xff09; #…

定时触发-uniapp + uniCloud 订阅消息实战教程(三)

上一节已经对云函数有了一定的了解&#xff0c;但是&#xff0c;为了发送订阅消息&#xff0c;只会云函数还是差了那么一点意思&#xff0c;所以接下来的这一节&#xff0c;将带领大家熟悉一下定时触发。 熟悉定时触发 如果云函数需要定时/定期执行&#xff0c;即定时触发&…

【力扣C++】爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2&#x…

昇思25天学习打卡营第1天|初学教程

文章目录 背景创建环境熟悉环境打卡记录学习总结展望未来 背景 参加了昇思的25天学习记录&#xff0c;这里给自己记录一下所学内容笔记。 创建环境 首先在平台注册账号&#xff0c;然后登录&#xff0c;按下图操作&#xff0c;创建环境即可 创建好环境后进入即可&#xff0…

文华财经wh7均线ema金叉死叉预警指标公式源码

文华财经wh7均线ema金叉死叉预警指标公式源码&#xff1a; 文华财经均线EMA预警指标公式源码&#xff1a; EMA25:EMA(C,25); EMA70:EMA(C,70); EMA580:EMA(C,580); //在EMA580上方EMA25和EMA70金叉EMA70在EMA580上方创1日新高创前5根K线最高 EMA25>EMA580&&EM…

Rosetta Stone + Lexia English:各自特点和差异化互补运用

Rosetta Stone 和 Lexia English 是两款不同的语言听说训练软件&#xff0c;虽然它们都专注于听说训练&#xff0c;但是它们各自有着独特的特点和教学方法。以下是它们的一些区别和互补之处&#xff1a; Rosetta Stone 教学方法&#xff1a;Rosetta Stone 使用一种称为“动态…

PHP原生代码生成pdf---解决中文乱码问题

github地址 尝试了使用composer下载FPDF或者FPDI&#xff0c;但是无法解决中文乱码问题。只有使用这个github上的中文包才可以&#xff0c;那俩没必要下。 直接上代码(这里并没有使用任何框架) require(./fpdf/chinese.php);//生成pdf$pdf new PDF_Chinese();$pdf->AddPage…

Jenkins教程-8-上下游关联自动化测试任务构建

上一小节小节我们学习了一下Jenkins自动化测试任务发送测试结果邮件的方法&#xff0c;本小节我们讲解一下Jenkins上下游关联自动化测试任务的构建。 下面我们以一个真实的自动化测试场景来讲解Jenkins如何管理上下游关联任务的触发和构建&#xff0c;比如我们有两个jenkin任务…

【贪心】个人练习-Leetcode-1647. Minimum Deletions to Make Character Frequencies Unique

题目链接&#xff1a;https://leetcode.cn/problems/minimum-deletions-to-make-character-frequencies-unique/description/ 题目大意&#xff1a;给出一个字符串s&#xff0c;只包含小写字母。目标是【通过删除若干个字符】将其变为「每个字符出现的频次都不同」的字符串&am…

病毒防护:恶意代码检测技术,病毒分类、传播方式,恶意代码的清除与防护

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 这一章节我们需…

惠海 HC070N06LS 6N06 沟槽型NMOS管 皮实耐抗 丝印HC606A 抗雪崩能力强

产品详情 HC070N06LS 60V/6A MOS管 低Vth 惠海半导体原厂 抖频过认证EMC&EMI:0 产品详情 型号HC070N06LS品牌惠海半导体 封装SOT23-3输入电压60V 驱动方式内置MOS耐压150V。 Features &#xff1a; N-Channel Enhancement mode Very low on-resistance VGS4.5V Fast S…

力扣每日一题 下一个更大元素 II 单调栈 循环数组

Problem: 503. 下一个更大元素 II 思路 &#x1f468;‍&#x1f3eb; 参考题解 Code class Solution {public int[] nextGreaterElements(int[] nums) {int n nums.length;int[] res new int[n];Arrays.fill(res,-1);Stack<Integer> stack new Stack<>();//…

docker-compose部署Flink及Dinky

docker-compose部署Flink及Dinky 服务器环境&#xff1a;centos7 1. 配置hosts vim /etc/hostsx.x.x.x jobmanager x.x.x.x taskmanager x.x.x.x dinky-mysql2. 文件目录结构 . ├── conf │ ├── JobManager │ │ ├── flink-conf.yaml │ │ ├── log…

深入理解 Redis 内存碎片及其清理方法

在线工具站 推荐一个程序员在线工具站&#xff1a;程序员常用工具&#xff08;http://cxytools.com&#xff09;&#xff0c;有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具&#xff0c;效率加倍嘎嘎好用。 程序员资料站 推荐一个程序员编程资料站&#xff1a;…

Appium+python自动化(二十三)- 真假美猴王Monkeyrunner与Monkey傻傻的分不清楚(超详解)

简介 看《西游记》第五十七回&#xff0c;说是“六耳猕猴”化作孙悟空的摸样&#xff0c;伤了唐僧&#xff0c;后又和孙悟空大打出手…… 这位假孙悟空&#xff0c;实力不用多说了吧&#xff0c;和真孙悟空一般无二&#xff0c;大战孙悟空&#xff0c;闹到上天入地下海。 在唐僧…

HTML、JavaScript连接MySQL数据库以及对数据库的表进行修改

要使用HTML和JavaScript连接到MySQL数据库并进行表的修改&#xff0c;通常需要使用一个后端服务器来处理数据库的连接和操作&#xff0c;因为HTML和JavaScript在浏览器中运行&#xff0c;不适合直接连接数据库。常用的后端服务器语言包括Node.js、PHP、Python等。这里我们将使用…

服装连锁企业批发零售一体化解决方案

在现代商业环境中&#xff0c;服装连锁企业面临着市场竞争激烈、消费者需求多样化和供应链复杂化的挑战。为了有效应对这些挑战&#xff0c;建立一体化的批发零售解决方案已成为提升运营效率、优化客户体验的关键举措。这种解决方案不仅整合了进销存管理&#xff0c;还有效整合…

Kotlin设计模式:工厂方法详解

Kotlin设计模式&#xff1a;工厂方法详解 工厂方法模式&#xff08;Factory Method Pattern&#xff09;在Kotlin中是一种常见的设计模式&#xff0c;用于将对象创建的责任委派给单一的方法。本文将详细讲解这一模式的目的、实现方法以及使用场景&#xff0c;并通过具体的示例…

核心原因:如果互联网设计师是青春饭,为何别人的青春那么久?

大家好&#xff0c;我是大千UI工场&#xff0c;从事UI设计和前端开发快10年了&#xff0c;算是老司机&#xff0c;经常看到UI设计师在群里抱怨&#xff0c;说这行是青春饭&#xff0c;干几年就换行&#xff0c;真相是这样吗&#xff1f; 一、互联网设计师相较于传统设计师 互…