c++ 个人汇总

function函数

std::function 是一种通用、多态的函数封装,它的实例可以对任何可以调用的目标实体进行存储、复制和调用操作,它也是对 C++中现有的可调用实体的一种类型安全的包裹(相对来说,函数指针的调用不是类型安全的),简而言之,std::function 就是函数的容器

#include <functional>
#include <iostream>

using namespace std;
int foo(int x, int y)
{
    return x+y;
}
int main()
{
    //lambd函数对象
    auto fl = [](int x, int y){return x + y; };
    cout << fl(2, 3) << endl;
	//function包装了一个返回值为int,参数为两个int类型的函数
    function<int(int, int)>f2 = [](int x, int y){return x + y; };
    cout << f2(3, 4) << endl;
    
    auto f3 = foo;
    cout << f3(2, 3) << endl;
    //function包装了一个返回值为int,参数为两个int类型的函数
    function<int(int,int)> f4 = foo;
    cout << f4(3, 4) << endl;

    return 0;
}

lambda 表达式

  1. 语法
    [capture](parameters)->return-type {body}
  • []叫做捕获说明符,表示一个lambda表达式的开始。接下来是参数列表,即这个匿名的lambda函数的参数。
auto fl = [](int x,int y) -> int {return x+y;};
auto fl = [](int x, int y){return x + y; };

[]这东西就用来设置读取变量方式的。比如当前作用域有个变量 i ,你可以选择按 [值、址] 来引用它
它有两个通配符 = 和 & 一个取值一个取址,它有几个组合用法:

[a, &b] // a 传值,b 传址
[=, &b]	// 全都传值,但是b 除外(传址)
[&, b]	// 全都传址,但是b 除外(传值)
  1. (int x, int y) 这是形参列表
  2. -> int 这个 int 是返回值。如果省略则函数结果是啥类型就返啥类型。
  3. {函数体} [] (int x, int y) -> int { 函数体 }

- 捕获列表
在 lambda 表达式引出操作符[ ]里的“captures”称为“捕获列表”,可以捕获表达式外部作用域的变量,在函数体内部直接使用,这是与普通函数或函数对象最大的不同

捕获列表里可以有多个捕获选项,以逗号分隔,使用了略微“新奇”的语法,规则如下

[ ]        :无捕获,函数体内不能访问任何外部变量 
[ =]      :以值(拷贝)的方式捕获所有外部变量,函数体内可以访问,但是不能修改。
[ &]      :以引用的方式捕获所有外部变量,函数体内可以访问并修改(需要当心无效的引用);

// 捕获单个值
[ var]   :以值(拷贝)的方式捕获某个外部变量,函数体可以访问但不能修改。
[ &var] :以引用的方式获取某个外部变量,函数体可以访问并修改

// 设置不同的 捕获属性
[ this]   :捕获this指针,可以访问类的成员变量和函数,
[ =&var] :引用捕获变量var,其他外部变量使用值捕获。
[ &,var]:只捕获变量var,其他外部变量使用引用捕获。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值