c++新特性---lambda表达式
Posted bwbfight
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++新特性---lambda表达式相关的知识,希望对你有一定的参考价值。
#include <algorithm> #include <iostream> #include <functional> #include <vector> #include <numeric> #include <array> #include <cstring> #include <cstdio> using namespace std; //解决函数嵌套问题 int main1() //[]cout << "hello lambda"; ();//匿名lambda表达式,()最后的括号起到调用作用 auto fun = []cout << "hello lambda"; ;//函数指针 fun();//调用 int main2() // 函数体,执行 //()参数列表,函数体,()调用 //[](char* str)cout << str << endl; ("huahaua"); auto fun = [](char* str)cout << str << endl; ; fun("fangfang"); cout << typeid(fun).name() << endl;//本质对类的封装 cout << (void*)fun << endl;//lambda 不可以直接取地址,无法当做函数指针 int main3() auto fun = [](double a, double b)return a + b; ; cout << fun(10,19.1)<<endl; //->在()之间,指定返回值类型 auto fun1 = [](double a, double b)->intreturn a + b; ; cout << fun1(10, 19.1) << endl; //内联展开,无法取出地址 //->decltype(a+b)类型推理 auto fun2 = [](double a, double b)->decltype(a+b) return a + b; ; cout << fun2(10, 19.1) << endl; int main() int num = 100; auto fun = [](int num)num = 5; cout << num << endl; ; fun(num);//遵循副本机制,是复制 cout << "main:" << num << endl;
例2:
#include <algorithm> #include <iostream> #include <functional> #include <vector> #include <numeric> #include <array> #include <cstring> #include <cstdio> using namespace std; //lambda表达式主要解决代码的内嵌,CPP支持lambda表达式 //[]()multable->int();//匿名表达式 //[] =引用,只能读,不能改 =mutable读原本改副本,&读写原本 //()参数,int a,int b //语句实现,()调用 //->指定返回值 //c11不支持auto.c14支持 int main1() int num1 = 100, num2 = 99; //=只能读外部变量,不可以写 //[=]()num1 = 20, num2 = 30; cout << num1 << num2 << endl; (); //& 可以读写外部变量 [&]()num1 = 20, num2 = 30; cout << num1 << num2 << endl; (); //=加mutable,把外部变量作为副本进行修改,不影响外部变量 [=]()mutablenum1 = 20, num2 = 30; cout << num1 << num2 << endl; (); cout << "main:"<<num1 << " " << num2 << endl; system("pause"); int main2() int a = 10, b = 9, c = 8; //&a,可读可写,b,c只能读 //[&a,b,c]()a=111,cout << a << b << c << endl; (); //a,b,c 只能读 //[a, b, c]()a = 111, cout << a << b << c << endl; () //mutable副本,能读写,读的是原本,写的是副本 [a, b, c]()mutablea = 111, b = 123, c = 321, cout << a << b << c << endl; (); //[=]只能指定全部 int main3() //只适用于vs2015 [](auto a, auto b)cout << a + b << endl; (10,11);//c++14推理数据类型 [](auto a, auto b)cout << a + b << endl; (10.8, 11); [](auto a=0, auto b=0)cout << a + b << endl; (10.8, 11); [](int a = 0, int b = 0)cout << a + b << endl; (10.8, 11); int main() array<int, 10> myint 1, 2, 3, 4, 5, 6, 7, 8, 9 ;//cpp风格数值 for_each(myint.begin(), myint.end(), [](int num)cout << num << " "; );//显示数值 for_each(myint.begin(), myint.end(), [](int& num)num + 1, cout << num << " "; );//修改 for_each(myint.begin(), myint.end(), [](int num)cout << num << " "; );//显示修改后的值
以上是关于c++新特性---lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章
重学Java 8新特性 | 第3讲——我们为什么要使用Lambda表达式?
重学Java 8新特性 | 第3讲——我们为什么要使用Lambda表达式?