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表达式的主要内容,如果未能解决你的问题,请参考以下文章

c++基础(lambda)

重学Java 8新特性 | 第3讲——我们为什么要使用Lambda表达式?

重学Java 8新特性 | 第3讲——我们为什么要使用Lambda表达式?

重学Java 8新特性 | 第3讲——我们为什么要使用Lambda表达式?

Java8新特性 Lambda表达式

JDK8新特性之Lambda表达式