版权声明:所有文章版权归属博主个人 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不能使用所在函数的变量 |
[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)转化,放入第二个容器内