美文网首页
C++11匿名函数

C++11匿名函数

作者: Tomtoms | 来源:发表于2019-11-07 23:03 被阅读0次

[C++11] Lambda表达式

Lambda表达式是一个匿名函数。基本语法如下:
[capture list] (parameter list) -> return type {function body}

同Python的Lambda表达式不同的是,C++11的Lambda多了capture list,用于指定作用域(C++为块作用域)内的变量的传递方式,是传值还是传引用,而Python默认为不可变对象传值,可变对象传引用,类似lambda x: x**2。下面介绍capture list的用法:

  1. [] 没有定义变量,如果在函数体内使用未定义的变量会导致错误。
  2. [&] 所有变量都以传引用的方式使用
  3. [=]所有变量都已传值方式使用
  4. [&,x] x使用传值,其他都使用传引用
  5. [=, &z] z使用传引用,其他都使用传值
  6. [x , &y] x使用传值,y使用传引用

[image:477183C9-6BB8-455C-9DB2-928824C6A29C-57121-00008A3D53C478E4/4106E0D7-9541-47E2-8BB4-169B400D97DB.png]

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> tmp;
    tmp.push_back(1);
    tmp.push_back(2);
    // 无函数对象参数,输出1,2
    {
        for_each(tmp.begin(), tmp.end(), [](int v){cout << v << endl;});
    }
    // a传值,输出11,12,10
    {
        int a = 10;
        for_each(tmp.begin(), tmp.end(), [=](int v){cout << v+a << endl;});
        cout << a << endl;
    }
    // a传引用,输出11,13,12
    {
        int a = 10;
        for_each(tmp.begin(), tmp.end(), [&](int v){cout << v+a << endl;a++;});
        cout << a << endl;
    }
    // 同上
    {
        int a = 10;
        for_each(tmp.begin(), tmp.end(), [&a](int v){cout << v+a << endl;a++;});
        cout << a << endl;
    }
    // a传值,b传应用,并且如果对a++,会报错,输出11,12,22
    {
        int a = 10;
        int b = 20;
        for_each(tmp.begin(), tmp.end(), [=, &b](int v){cout << v+a << endl;b++;});
        cout << b << endl;
    }
    // 对函数参数进行传引用,输出2,3
    {
        for_each(tmp.begin(), tmp.end(), [](int &v){v++;});
        for_each(tmp.begin(), tmp.end(), [](int v){cout << v << endl;});
    }
    // 空lambda
    {
        [](){}();
        []{}();
    }
}

相关文章

  • C++学习笔记(十七) - Lambda函数

    参考文献:C++11新特性:Lambda函数(匿名函数)匿名函数,C++11里面加入了匿名函数。 1 定义一个基本...

  • C++的匿名函数(lambda表达式)

    总述C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). 它是定义和使用匿名函数对象...

  • c++和c#的lambda函数

    C++ 可以当作匿名函数,c++11加入语法:[captures] (params) -> ret {Statme...

  • C++ Lambda函数与表达式

    C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。 Lambda 表达式...

  • Lambda函数与表达式

    C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。Lambda表达式完整...

  • C++11匿名函数

    [C++11] Lambda表达式 Lambda表达式是一个匿名函数。基本语法如下:[capture list] ...

  • C++中的Lambda表达式

    1.Lambda函数与表达式 C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式)。L...

  • c++11 lambda表达式

    1 lambda表达式 C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式)。Lamb...

  • C++ 匿名函数(lambda函数,lambda表达式)

    C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). Lambda表达式具体形式如下...

  • Lambda表达式

    Lambda表达式是C++11的新特性,是一种匿名函数,一般用于小型的函数,比如: 上面是使用函数指针输出一个数组...

网友评论

      本文标题:C++11匿名函数

      本文链接:https://www.haomeiwen.com/subject/odmbbctx.html