[C++11]lambda表达式语法
Posted Wecccccccc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++11]lambda表达式语法相关的知识,希望对你有一定的参考价值。
代码如下:
#include <iostream>
using namespace std;
void func(int x, int y)
{
int a;
int b;
[=]() {
int c = a;//使用了外部变量,[]里面加个 =
int d = x;
};
}
int main()
{
return 0;
}
lambda表达式的注意事项:
以上图片来自下面链接:
https://subingwen.cn/cpp/lambda/
代码如下:
#include<iostream>
using namespace std;
void func(int x,int y)
{
int a = 7;
int b = 9;
[=, &x]()mutable //因为b是只读的,我们无法修改它的值,所以加了mutable关键字,就可以修改了
{
int c = a;
int d = x;
b++;
cout << "b = " << b << endl;
}();
cout << "b = " << b << endl;
}
int main()
{
func(1,2);
return 0;
}
测试结果:
3.返回值
很多时候,lambda表达式的返回值是非常明显的,因此在C++11中允许忽略lambda表达式的返回值。
代码如下:
#include<iostream>
using namespace std;
auto f = [](int a)->int
{
return a + 10;
};
auto f1 = [](int a)
{
return a + 10;
};
int main()
{
cout << f(2) << endl;
cout << f1(3) << endl;
return 0;
}
测试结果:
代码如下:
//OK,可以自动推导出返回值类型
auto f = [](int a)
{
return a ;
};
//error,不能推导出返回值类型
auto f1 = []()
{
return {1,2};//初始化列表作为函数返回值
};
以上图片来自下面链接:
https://subingwen.cn/cpp/lambda/
代码如下:
#include <iostream>
#include <functional>
using namespace std;
void func(int x, int y)
{
int a;
int b;
using ptr = void(*)(int);
ptr p1 = [](int x)
{
cout << "x = " << x << endl;
};
p1(11);
//error 捕获了外部变量,所以不能看做函数指针
/*ptr p2 = [=](int x)
{
cout << "x = " << x << endl;
}*/
function<void(int)>fff = [=](int x)
{
cout << "x = " << x << endl;
};
fff(1);
//绑定
function<void(int) > fff01 = bind([=](int x)
{
cout << "x = " << x << endl;
}, placeholders::_1);
fff01(12);
}
int main()
{
func(12,143);
return 0;
}
测试结果:
以上是关于[C++11]lambda表达式语法的主要内容,如果未能解决你的问题,请参考以下文章