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

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

 固定参数例子:

相关文章:

  • 《解锁万相2.1大模型:开启视频创作新世界》:此文为AI自动生成
  • 聊一聊 IM 如何优化监控
  • spring boot打包插件的问题
  • 计算机毕业设计SpringBoot+Vue.js医院资源管理系统(源码+文档+PPT+讲解)
  • 计算机毕业设计SpringBoot+Vue.js文档管理系统(源码+文档+PPT+讲解)
  • Linux常见基本指令(二)
  • STM32中的ADC
  • 第2章 windows故障排除(网络安全防御实战--蓝军武器库)
  • C++性能优化常用技巧
  • DeepSeek到TinyLSTM的知识蒸馏
  • 【Maven】入门介绍 与 安装、配置
  • [前端]Typescript中装饰器和泛型详解
  • 【软件测试】_使用selenium进行自动化测试示例
  • 神经网络 - 激活函数(ReLU 函数)
  • torch.einsum 的 10 个常见用法详解以及多头注意力实现
  • LeetCode 2353. 设计食物评分系统题解
  • 3.jvm的执行流程
  • 16. LangChain实战项目2——易速鲜花内部问答系统
  • C++小课堂——变量的声明,赋值和初始化
  • h5 IOS端渐变的兼容问题 渐变实现弧形效果
  • “80后”萍乡市安源区区长邱伟,拟任县(区)委书记
  • 流失79载,国宝文物“子弹库帛书”(二、三卷)回归祖国
  • 李成钢:近期个别经济体实施所谓“对等关税”,严重违反世贸组织规则
  • 四川甘孜炉霍县觉日寺管委会主任呷玛降泽被查
  • 国家卫健委通报:吊销肖某医师执业证书,撤销董某莹四项证书
  • 齐白石精品在波士顿展出,“白石画屋”呈现水墨挥洒