C++:从尾置返回类型引出lambda表达式

版权声明:所有文章版权归属博主个人 https://blog.csdn.net/weixin_41143631/article/details/87884968

本文参考《C++primer》和个人使用

尾置返回类型

int (*func(int i))[10] 是一个函数的声明

func(int i)  表明func有一个int的参数

(*func(int i))  表明 我们可以用函数调用执行解引用

(*func(int i))[10] 表明 解引用 func的调用得到大小为10的数组

前面的int表明数组里面都是int

在C++11中 简化

auto func(int i) -> int (*) [10]

func接受一个int参数,返回一个指针,指针指向含有10个整数的数组。

如果知道返回的指针指向哪个数组,就可以使用decltype声明返回类型。

lambda

lambda表达式,替代谓词函数。

谓词函数是一个判断式,一个返回bool值的函数或者仿函数。几元就是函数有几个参数,至于定义和使用,函数定义和一般的函数定义一样,仿函数就是写个类,然后重载operator()。使用就是在那些以这种需要返回bool值的函数作参数的函数里用了。——引用自百度百科

[捕获列表] (参数列表) -> return type {函数体}

return type为返回类型,可以返回为void

一个lambda表达式必须包含捕获列表和函数体,这个句话是核心

lambda捕获列表
[] 空捕获,lambda不能使用所在函数的变量

[names]

names是逗号分隔的名字列表,是lambda所在函数的局部变量,默认被拷贝,名字前加&则引用捕获
[&] 引用捕获
[=] 值捕获
[&,identifie_list]和[=,identifie_list] identifie_list是逗号分隔的列表,包含0-多个来自函数的变量,采用对应的值捕获和引用捕获。

auto f=[] {return 1;};

[] (int a,int b){ return a+b;}

其作用和仿函数差不多

class func{
public:
	int operator()(int x, int y){return x+y; }
};

书中提到一个使用 

transform(v.begin(),v.end(),v.begin(),[](int i) -> int 
{
    if(i<0) 
        return -i;
    else
        return i;
});
//这个是标准库的transform算法,接受4个参数,函数作用是把容器v.begin()到v.end()的负数变为正数
//transform(b1,e1,b2,op)   把一个区间[b1,e1)内的数据经过(op)转化,放入第二个容器内

猜你喜欢

转载自blog.csdn.net/weixin_41143631/article/details/87884968
今日推荐