zoukankan      html  css  js  c++  java
  • lambda表达式

    首先看一下lambda表达式的格式

    [外部变量访问方式说明符] (参数表) -> 返回值类型
    {
       语句块
    }

    其实lambda表达式就是一个简单的函数

    格式里面的参数,返回值,语句块 都是普通函数的参数 返回值和函数体

    前面的访问方式说明符有两种 [&] [=]

    [=]  表示变量不可被修改

    [&]  和[=]相反,表示变量可以被修改

    举个栗子

    int main(int argc,char *argv[])
    {
        auto fun = [=](int a)->int { return a; };
        cout << fun(6) << endl;
        return 0;
    }

    输出自然是6,这个表达式就相当于这样一个函数 输出一个int 然后return这个int

    如果我将这个例子稍加改动,在return 之前先改一下a,那就要用[&]

    int main(int argc,char *argv[])
    {
        auto fun = [&](int &a)->int { a++; return a; };
        int a = 6;
        cout << fun(a) << endl;
        return 0;
    }

    当然了也可以不写返回值,这样编译器会自动识别你的返回值,如果没有返回值就返回void

    int main(int argc,char *argv[])
    {
        auto fun = [&](int &a){ a++; return a; };
        int a = 6;
        cout << fun(a) << endl;
        return 0;
    }

    [=, &x, &y]  表示外部变量 x、y 的值可以被修改,其余外部变量不能被修改;
    [&, x, y]      表示除 x、y 以外的外部变量,值都可以被修改。

    甚至我还可以没有参数列表

    int main(int argc,char *argv[])
    {
        auto fun = [&](){ cout << "a" <<endl; };
        fun();
        return 0;
    }

    看下面这个例子

    int b = 8;
    
    int main(int argc,char *argv[])
    {
        static int a = 6;
        auto fun = [&](){ a++; return a+b; };
        cout <<fun()<<endl;
        return 0;
    }

    输出值为15

    我没有传入参数,但是他能使用我前面定义过的全局变量和静态变量。

    int b = 8;
    
    int main(int argc,char *argv[])
    {
        static int a = 6;
        int c = 8;
        auto fun = [=](){ a++; return c = a+b+c; };
        cout <<fun()<<endl;
        return 0;
    }

    这个代码就是错误的,因为在函数体里面改变了c的值,但是访问说明符是[=]

    所以要改成

    int b = 8;
    
    int main(int argc,char *argv[])
    {
        static int a = 6;
        int c = 8;
        auto fun = [&](){ a++; return c = a+b+c; };
        cout <<fun()<<endl;
        return 0;
    }

    这样才能得出正确结果23

  • 相关阅读:
    VS 文件编码
    CSS中强大的EM 弹性布局
    编辑器【updating】
    下一代Jquery模板JsRender
    HTML 特殊符号编码对照表
    ASP.NET 文摘 [updating]
    Html5/Html CSS3/css 文摘 [updating]
    在Sublime Text 2中设置任意扩展名文件的默认语法
    Delphi笔记Indy10.5.5 IdTcpServer 与 IdTcpClient Demo 服务器端
    基于silverlight的工作流编辑器
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/12697068.html
Copyright © 2011-2022 走看看