c++ lambda函数的真实面目

#include <functional>
#include <iostream>
//基础函数
void printInfo(int a, int b, int c) {
            std::cout << " a " << a << " b " << b << " c " << c << std::endl;
}

//操作符重载函数
struct Print {
    void operator() (int a, int b, int c) const {
            std::cout << " a " << a << " b " << b << " c " << c << std::endl;
    }
};
//模板函数
template<typename T1, typename T2, typename T3>
void templatePrint(T1 a, T2 b, T3 c) {
            std::cout << " a " << a << " b " << b << " c " << c << std::endl;
}

//操作符重载 + 模板 的函数
struct TemplatePrint {
    template<typename T1, typename T2, typename T3>
        void operator() (T1 a, T2 b, T3 c) const {
            std::cout << " a " << a << " b " << b << " c " << c << std::endl;
    }
};

inline void print(int a, int b, int c) {
    std::cout << " a " << a << " b " << b << " c " << c << std::endl;
}
template<typename Fun>
void printUseFun(Fun fun, int a, int b, int c) {
    fun(a, b, c);
}
void test_1() {
    Print printUseClass;
    TemplatePrint printUseTempClass;

    printInfo(1, 2, 3);
    printUseClass(1, 2, 3); //operator() (int a, int b, int c)

    templatePrint(1, 2, 3);
    printUseTempClass(1, 2, 3);
    print(1, 2, 3);

    //以前inline 函数跟普通函数调用差不多
    //lambda就是个inline函数, 只是把 inline 函数作为一个参数或者一个local变量来使用, 

    std::cout << "lamda: " << std::endl;
    auto local = [](int a, int b, int c) {
        std::cout << " a " << a << " b " << b << " c " << c << std::endl;
    };
    printUseFun(local, 1, 2, 3);
    printUseFun([](int a, int b, int c) {
        std::cout << "lamda2:" << std::endl;
        std::cout << " a = " << a << " b = " << b << " c = " << c << std::endl;
    }, 2, 3, 5);

    int a = 6, b = 7, c = 8;

    auto local2  = [a, b, c]() {
        std::cout << " a = " << a << " b = " << b << " c = " << c << std::endl;
    };
    local2();

    auto local3 = [=]() {
        std::cout << "====" << std::endl;
        std::cout << " a = " << a << " b = " << b << " c = " << c << std::endl;
    };
    local3();

    auto local4 = [=]() mutable {
        std::cout << "====" << std::endl;
        a = 4, b = 4 , c = 4;
        std::cout << " a = " << a << " b = " << b << " c = " << c << std::endl;
    };
    local4();

}
int main(void) {
    test_1();
    return 0;
}

原文地址:https://www.cnblogs.com/lyxf/p/12358338.html

时间: 2024-08-09 11:46:55

c++ lambda函数的真实面目的相关文章

lambda函数

C++11一个最激动人心的特性是支持创建lambda函数(有时称为闭包).这意味着什么?一个Lambda函数是一个可以内联写在你代码中的函数(通常也会传递给另外的函数,类似于仿函数或函数指针).使用Lambda,创建机动函数会更简单,而以前你必须创建一个有名函数.在这篇文章中,我先用一些例子解释为什么lambda很酷,然后我会讲解可能会用到的关于lambda的所有细节. 为什么Lambda很酷 想象你有一个地址簿类,并且你想要提供一个可供检索的函数.你可能会提供一个简单的函数,接受一个字符串然后

python笔记-lambda函数、sorted函数、map函数

1.lambda函数:又称匿名函数,示例如下: def f(x): return x**2 print f(4)  #16 g = lambda x:x**2 print g(4)  #16 2.map函数 print map(lambda x:x**2,range(10)) #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 3.sorted函数 dict = {9:2,4:3,6:9,'a':'test','e':'fff','*':'$'} print sorted

Python编程中自定义Lambda函数的使用场景

Python 中定义函数有两种方法,一种是用常规方式 def 定义,函数要指定名字,第二种是用 lambda 定义,不需要指定名字,称为 Lambda 函数. Lambda 函数又称匿名函数,匿名函数就是没有名字的函数,函数没有名字也行?当然可以啦.有些函数如果只是临时一用,而且它的业务逻辑也很简单时,就没必要非给它取个名字不可. 好比电影里面的群众演员,往往他们的戏份很少,最多是衬托主演,跑跑龙套,他们需要名字吗?不需要,因为他们仅仅只是临时出镜,下次可能就用不着了,所以犯不着费心思给他们每个

lambda函数,常用函数,内置函数(string,zip()map()filter())的用法

lambda函数胡使用#coding:utf-8g = lambda x,y:x*y/*必须亦g=*/print g(2,3)/*print必须有*/swtich函数使用 def jia(x,y):    return x+ydef jian(x,y):    return x-ydef cheng(x,y):    return x*ydef chu(x,y):    return x/yoperator = {"+":jia,"-":jian,"*&q

Python中的lambda函数

今天在看书的时候,看到了这样的一条语句: if isinstance(value,int) or isinstance(value,float): split_function=lambda row:row[column]>=value 对其中的lambda这个函数表示很不明白,于是看了看Python文档,文档中解释如下:   lambda An anonymous inline function consisting of a single expression which is evalua

C++11新特性:Lambda函数(匿名函数)

声明:本文参考了Alex Allain的文章http://www.cprogramming.com/c++11/c++11-lambda-closures.html 加入了自己的理解,不是简单的翻译 C++11终于知道要在语言中加入匿名函数了.匿名函数在很多时候可以为编码提供便利,这在下文会提到.很多语言中的匿名函数,如C++,都是用Lambda表达式实现的.Lambda表达式又称为lambda函数.我在下文中称之为Lambda函数. 为了明白Lambda函数的用处,请务必先搞明白C++中的自动

初窥c++11:lambda函数

为什么需要lambda函数 匿名函数是许多编程语言都支持的概念,有函数体,没有函数名.1958年,lisp首先采用匿名函数,匿名函数最常用的是作为回调函数的值.正因为有这样的需求,c++引入了lambda 函数,你可以在你的源码中内联一个lambda函数,这就使得创建快速的,一次性的函数变得简单了.例如,你可以把lambda函数可在参数中传递给std::sort函数 #include <algorithm> #include <cmath> void abssort(float*

Python lambda函数

python允许定义单行的小函数,定义lambda函数的形式如下: lambda 参数:表达式lambda函数默认返回表达式的值,可接收任意个参数,包括可选参数,但是表达式只有一个. 如果你的函数非常简单,只有一个表达式,不包含命令,可以考虑lambda函数.

Python的lambda函数与排序

Python的lambda函数与排序 2010-03-02 15:02 2809人阅读 评论(0) 收藏 举报 lambdapythonlistlispclass工作 目录(?)[+] 前几天看到了一行求1000的阶乘的Python代码: print    reduce ( lambda    x , y : x * y ,    range ( 1 ,    1001 )) 一下子被python代码的精简 与紧凑所折服,故对代码进行了简单的分析. reduce与range都是Python的内置