C++20中lambda表达式新增加支持的features

news2024/11/14 15:36:43

      1.弃用通过[=]隐式捕获this,应使用[=,this]或[=,*this]显示捕获

namespace {
struct Foo {
	int x{ 1 };

	void print()
	{
		//auto change1 = [=] { // bad
		auto change1 = [=, this] { // good, this: reference
			this->x = 11;
		};

		change1();
		std::cout << "x: " << x << std::endl; // x: 11

		auto change2 = [=, *this] { // *this: value
			//this->x = 22; // error C3490: 由于正在通过常量对象访问"x",因此无法对其进行修改
			auto m = this->x;
			std::cout << "x: " << x << std::endl; // x: 11
		};

		change2();
	}
};

} // namesapce

int test_lambda_20_this()
{
	Foo foo;
	std::cout << "x: " << foo.x << std::endl; // x: 1
	foo.print();
	std::cout << "x: " << foo.x << std::endl; // x: 11

	return 0;
}

      执行结果如下图所示:

      2.lambda表达式中支持使用模板语法

int test_lambda_20_template()
{
	auto func = []<typename T>(const T& x, const T& y) {
		return (x + y);
	};

	std::cout << "value: " << func(1, 2) << std::endl; // value: 3
	std::cout << "value: " << func(std::string{ "hello " }, std::string{ "world" }) << std::endl; // value: hello world

	return 0;
}

      3.lambda中支持参数包(parameter pack):包括按值捕获参数包和按引用捕获参数包

namespace {
template <typename... Args>
auto func1(Args&&... args)
{
	return [...args = std::forward<Args>(args)] { // by value
		// ...
	};
}

template <typename... Args>
auto func2(Args&&... args) {
	return [&...args = std::forward<Args>(args)] { // by reference
		// ...
	};
}

} // namesapce

int test_lambda_20_parameter_pack()
{
	auto print = [](auto&&... args) {
		((std::cout << args << ' '), ...);
		std::cout << std::endl;
	};

	print(6, 8, "hello, world");

	return 0;
}

      GitHub:https://github.com/fengbingchun/Messy_Test

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

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

相关文章

【进程间通信】匿名管道

1.进程间通信的介绍 是什么 为什么 怎么做 匿名管道 原理 特征 管道的四种情况可以写代码自己看看 管道接口 编码实现 父进程进行读&#xff0c;子进程进行写 里面有snprintf的使用 #include<iostream> #include<unistd.h> #include<stdlib.h> #i…

力扣435-无重叠区间(Java详细题解)

题目链接&#xff1a;435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。 贪心方法&#xff1a;局部最优推出全局最优。 如果一个题你觉得可以用局部最优推出全局最优&#xff0…

祝贺 | 武汉大学生命科学学院孙蒙祥教授课题组时隔三年再发Nature

公众号&#xff1a;生信漫谈&#xff0c;获取最新科研信息&#xff01; 祝贺 | 武汉大学生命科学学院孙蒙祥教授课题组时隔三年再发Naturehttps://mp.weixin.qq.com/s?__bizMzkwNjQyNTUwMw&mid2247487136&idx1&sn9d65a5f18c7b5131800446bcbba7fa06&chksmc0e9…

计算之魂:持续于正确的因果链(一)

文章目录 引言25 人赛跑比赛过程模拟演示 BB84 量子密钥分发&#xff08;量子通信&#xff09;协议模拟图形化演示 BB84 协议过程BB84 协议优势应用场景 结语 引言 如果你只有一杆 100 年前的毛瑟枪&#xff0c;能够打中目标只能靠天分&#xff0c;如果你有一杆最先进的狙击步…

每日定期分享诗歌

安装schedule库 首先&#xff0c;确保你已经安装了schedule库。如果没有安装&#xff0c;可以使用以下命令进行安装&#xff1a; pip install schedulepython每日定期分享诗歌 import json import requests import schedule import timedef get_poem():# 这里使用一个公开的…

Linux下快速判断当前终端使用的是bash or csh

在Linux下设置环境变量的时候&#xff0c;可能你也遇到过export: Command not found一类的错误。这是因为当前终端使用的不是bash&#xff0c;如何快速判断当前终端使用的是哪种类型的shell呢&#xff1f; echo $0判断shell类型 最简单的方法就是在终端输入echo $0&#xff0…

编写一个每次随机生成 10个 0(包括) 到 100 之间的随机正整数。

编写一个每次随机生成 10个 0&#xff08;包括&#xff09; 到 100 之间的随机正整数。 package cn.itcast.example;import java.util.Iterator; import java.util.Random; public class example {public static void main (String[] arge) {System.out.println("Math.ra…

【微机原理】v和∧区别

&#x1f31f; 嗨&#xff0c;我是命运之光&#xff01; &#x1f30d; 2024&#xff0c;每日百字&#xff0c;记录时光&#xff0c;感谢有你一路同行。 &#x1f680; 携手启航&#xff0c;探索未知&#xff0c;激发潜能&#xff0c;每一步都意义非凡。 在汇编语言和逻辑表达…

Android使用内容提供器(ContentProvider)实现跨程序数据共享

文章目录 Android使用内容提供器&#xff08;ContentProvider&#xff09;实现跨程序数据共享新建内容提供器DatabaseProvider修改DatabaseProvider中的代码AndroidManifest.xml文件中注册provider修改activity_main.xml中的代码修改MainActivity中的代码运行ProviderTest项目 …

mysql查询慢除了索引问题还会是因为什么?

问题 作为一个程序员SQL查询慢的问题在工作和面试中都是会经常遇到的问题, 一般情况下我们都会联想到索引问题, 那么除了索引问题还有什么其他的场景会导致SQL查询慢呢? MySQL执行查询逻辑 例如我们使用可视化工具执行这样一条SQL: select * from user_info where age 10;…

Java:寻找最长连续序列

Java实现寻找最长连续序列 引言问题描述设计思路实现代码 代码解释单元测试 总结 引言 在面对大规模数据集时&#xff0c;经常需要识别出其中的连续子序列&#xff0c;这一任务在诸多领域如股票市场分析、天气预报等方面尤为关键&#xff0c;因为连续性的数据往往承载了重要的…

MacBook真的不能打游戏吗?Mac打游戏会损坏电脑吗?苹果电脑怎么玩游戏

MacBook从来都是高端的代名词&#xff0c;超强的性能搭配顶尖的系统&#xff0c;不光处理大型文件时举重若轻&#xff0c;长期使用也不会有明显卡顿。但很多人在需要MacBook一流的生产力同时&#xff0c;也希望能在空闲时体验游戏的乐趣。在大多人的印象里&#xff0c;Mac电脑对…

剑指offerJZ24 反转链表

描述&#xff1a; 给定一个单链表的头结点pHead(该头节点是有值的&#xff0c;比如在下图&#xff0c;它的val是1)&#xff0c;长度为n&#xff0c;反转该链表后&#xff0c;返回新链表的表头。 数据范围&#xff1a; 0≤n≤10000≤n≤1000 要求&#xff1a;空间复杂度 O(1)&…

大模型本地化部署1-Ollama安装(Windows)

大模型本地化部署1-Ollama安装&#xff08;Windows&#xff09; 1、下载Ollama安装包2、安装Ollama3、设置模型存放目录4、查看Ollama支持的模型5、模型安装6、查看已安装的模型列表7、运行一个模型8、设置Ollama允许外放访问 1、下载Ollama安装包 Ollama官网地址 https://oll…

【数据结构】二叉树基础(带你详细了解二叉树)

&#x1f30f;个人博客主页&#xff1a;心.c ​ 前言&#xff1a;最近学习了二叉树&#xff0c;和大家分享一下我的理解和感悟&#xff0c;希望对大家有所帮助&#xff0c;话不多说&#xff0c;开整&#xff01;&#xff01;&#xff01; &#x1f525;&#x1f525;&#x1f5…

示波器测量交流市电的注意事项

先说结论&#xff1a; 测量交流电或者市电的时候&#xff0c;注意示波器的电源千万不要用那种带GND的三角插头&#xff0c;可以用双脚插头但要小心漏电&#xff0c;示波器外壳金属部分可能带电&#xff1a; 当示波器的探头探针接L&#xff0c;黑色架子接N&#xff0c;这个时候…

YOLOv8改进 | 模块缝合 | C2f融合卷积重参数化OREPA【CVPR2022】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

python自动化操作PDF,拆分pdf合并pdf,提取pdf内容

第三方库介绍 Python 操作 PDF 会用到两个库&#xff0c;分别是&#xff1a;PyPDF2 和 pdfplumber。 PyPDF2 可以更好的读取、写入、分割、合并PDF文件&#xff1b; pdfplumber 可以更好的读取 PDF 文件中内容和提取 PDF 中的表格&#xff0c;主要应用于机器生…

Redis基础知识学习笔记(二)

文章目录 一.Redis安装1.Windows 下安装1>资源管理器目录进入2>目录进入命令:3.配置环境变量 2.Linux 下安装1> 安装redis2> 启动redis3> 查看 redis 是否启动 二.Redis配置1. 查看配置2. 编辑配置3. 参数说明 三.Redis数据类型1. String&#xff08;字符串&…

JVM学习《类加载运行-jvm内存模型》

目录 1.类加载过程 1.1 加载过程详解 1.2 类加载器 2.类加载器和双亲委派机制 3.JVM的内存模型 4.那些是GC Roots的对象有哪些&#xff1f; 1.类加载过程 通过类加载器加载主类到JVM&#xff0c;加载过程可以分为五个主要阶段&#xff1a;加载、验证、准备、解析、初始化。…