C++11特性(笔记二lambda,function)

embedded/2025/3/6 1:30:32/

目录

一.新的类功能

二. lambda

三. 包装器(function)

四.bind


一.新的类功能


1.  默认的移动构造和移动赋值 

        C++11 新增了两个默认成员函数,移动构造函数和移动赋值运算符重载。

        如果你提供了移动构造或者移动赋值,编译器不会自动提供拷贝构造和拷贝赋值。

2. deful t和 delete
1.  如果我们提供了拷贝构造,就不会生成移动构造了,那么我们可以 使用 default关键字显示指定移动构造生成


2. 如果能想要限制某些默认函数的生成,在C++98中,是该函数设置成private,并且只声明补丁已,这样只要其他人想要调用就会报错。在C++11中,只需在该函数声明加上=delete即可,该语法指示编译器不生成对应函数的默认版本,称=delete修饰的函数为删除函数

3. override 和 final关键字


1. C++11提供了override,可以帮助用户检测是否重写。

2. 如果我们不想让派生类 重写 这个虚函数,那么可以用final去修饰。


二. lambda


1  .lambda 表达式本质是一个匿名函数对象,跟普通函数不同的是他可以定义在函数内部。
2.  lambda 表达式语法使用层而言没有类型,所以我们 一般是用auto 或者 模板参数定义的对象 去接收 lambda 对象。
3.  lambda表达式的格式: [capture-list](parameters)->return type {function boby }

[capture-list]:  捕捉列表能够 捕捉函数中的变量 供 lambda 函数使用,捕捉列表可以传值和传引用捕捉。

第一种捕捉:捕捉方式是在捕捉列表中显示的传值捕捉和传引用捕捉,捕捉的多个变量用逗号分。[x,&z]表示x和y值捕捉,z引用捕捉。

第二种捕捉:是在捕捉列表中隐式捕捉,我们在捕捉列表写一个=表示隐式值捕捉,在捕捉列表
写一个&表示隐式引用捕捉,这样我们 lambda 表达式中用了那些变量,编译器就会自动捕捉那些
变量。

第三种捕捉:是在捕捉列表中混合使用隐式捕捉和显示捕捉。第一个元素必须是&或=,当为&混合捕捉时,后面的捕捉变量 必须是 值捕捉,同理,=混合捕捉时,后面的捕捉变量必须是引用捕捉

(parameters):  参数列表,与普通函数的参数列表功能类似,如果不需要参数传递,则可以连
同()一起省略
->return type:  返回值类型,用追踪返回类型形式声明函数的返回值类型,没有返回值时此
部分可省略。一般返回值类型明确情况下,也可省略,由编译器对返回类型进行推导
{function boby}:  函数体,函数体内的实现跟普通函数完全类似,在该函数体内,除了可以
使用其参数外,还可以使用所有捕获到的变量,函数体为空也不能省略。

一般模板:

捕捉列表例子1:

捕捉列表例子2:

捕捉列表例子3:


三. 包装器(function)

1. std::function 是一个类模板,也是一个包装器。 std::function 的实例对象可以包装存诸其他的可以调用对象,包括函数指针、仿函数、 lambda、 bind 表达式 等,存储的可调用对象被称为 std::function 的目标。

2.  若 std::function 不含目标,则称它为空。调用空std::function 的目标导致抛出 std::bad _ function_call 异常。

3. 函数,仿函数,lambda包装器例子:

4.类的例子:


四.bind

1. bind 是一个函数模板,它也是一个可调用对象的包装器,可以把他看做一个函数适配器,对接收的fun可调用对象进行处理后返回一个可调用对象。bind 可以用来调整参数个数和参数顺序。
2. bind 也在<functional>这个头文件中

调换参数位置例子:原来为10-5 现在为5-10

 固定参数例子:


http://www.ppmy.cn/embedded/170349.html

相关文章

机器学习校招面经二

快手 机器学习算法 一、AUC&#xff08;Area Under the ROC Curve&#xff09;怎么计算&#xff1f;AUC接近1可能的原因是什么&#xff1f; 见【搜广推校招面经四】 AUC 是评估分类模型性能的重要指标&#xff0c;用于衡量模型在不同阈值下区分正负样本的能力。它是 ROC 曲线…

SpaCy处理NLP的详细工作原理及工作原理框图

spaCy处理NLP的详细工作原理及工作原理框图 spaCy处理NLP的详细工作原理 spaCy是一个基于Python的开源自然语言处理&#xff08;NLP&#xff09;库&#xff0c;它提供了一系列高效且易用的工具&#xff0c;用于执行各种NLP任务&#xff0c;如文本预处理、文本解析、命名实体识…

centos和ubuntu下安装redis

1&#xff0c;判断环境是否有gcc gcc --version 如果未安装则执行 yum install -y gcc tcl 2&#xff0c;安装包下载,编译安装 cd /usr/local mkdir redis wget https://download.redis.io/releases/redis-4.0.11.tar.gz tar -xvf redis-4.0.11.tar.gz cd redis-4.0.11 编译 m…

c语言笔记 指针篇(上)

1.指针 在计算的存储器中有很多的存储单元&#xff0c;我们的操作系统把这些存储单元以字节为单位进行编号&#xff0c;也就是每个存储单元&#xff08;字节&#xff09;&#xff0c;都有编码。这些编码在我们内存中就称为地址。一个字节有八位&#xff0c;位是存储信息的最小…

接口测试工具:postman详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Postman 是一款功能强大的 API 开发和测试工具&#xff0c;以下是一些高级用法的详细介绍和操作步骤。 一、环境和全局变量 环境变量允许你设置特定于环境&#…

【云原生之kubernetes实战】在k8s环境下部署Vikunja任务管理工具

【云原生之kubernetes实战】在k8s环境下部署Vikunja任务管理工具 前言一、Vikunja介绍1.1 Vikunja简介1.2 Vikunja主要特点1.3 使用场景二、kubernetes介绍2.1 kubernetes简介2.2 kubernetes特点三、本次实践介绍3.1 本次实践简介3.2 本次环境规划四、检查k8s环境4.1 检查工作节…

FlashMLA(DeepSeek开源周,第一个框架):含源码分析

1. 概述 FlashMLA 是由 DeepSeek 原创开发的一种深度学习框架&#xff0c;专门用于加速多头注意力机制&#xff08;MLA&#xff09;架构的推理过程。它通过优化内存管理和计算效率&#xff0c;显著提升了模型在高性能 GPU 上的推理速度。FlashMLA 主要适用于 DeepSeek 的架构模…

Leetcode1 两数之和 python两种方法实现

Leetcode1 两数之和 python两种方法实现 文章目录 Leetcode1 两数之和 python两种方法实现方法一&#xff1a;枚举法&#xff08;暴力解法&#xff09;方法二&#xff1a;用空间换时间。 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为…