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

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

目录

一.新的类功能

二. 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.kler.cn/a/569824.html

相关文章:

  • VMware Ubuntu 共享目录
  • PDF文档中图片解析
  • 橙心同步助手更新,,支持博客园、头条和语雀
  • 不用写代码,批量下载今日头条文章导出excel和pdf
  • 傅里叶分析
  • 如何使用ArcGIS Pro制作横向图例:详细步骤与实践指南
  • 介绍如何使用生成对抗网络(GAN)和Cycle GAN设计用于水果识别的模型
  • ES 删除index 的curl
  • Vue.js 组件开发指南:实现、传值与优缺点分析
  • 性能优化——cache与cacheline
  • 如何远程访问svn中的URL
  • 数据结构(初阶)(六)----队列
  • ctfshow刷题笔记—栈溢出—pwn61~pwn64
  • C++类和对象:匿名对象及连续构造拷贝编译器的优化
  • Vscode通过Roo Cline接入Deepseek
  • 授权与认证之jwt(三)刷新令牌该如何设计
  • 计算机网络学习————(五)TCP/IP学习
  • ubuntu Linux 正确设置中文环境的方法
  • Python常见面试题的详解24
  • 实现用户特征自动识别和动态圈子创建,需构建一套完整的自动化流程