C++匿名函数

转自:https://www.cnblogs.com/pzhfei/archive/2013/01/14/lambda_expression.html

1.匿名/Lambda函数

[capture](parameters)->return-type{body}

如果没有参数,空的圆括号()可以省略.返回值也可以省略,如果函数体只由一条return语句组成或返回类型为void的话.形如:

[capture](parameters){body}

2.举例

//两数加法
[](int x, int y) { return x + y; } // 隐式返回类型

//自增
[](int& x) { ++x; }   // 没有return语句 -> lambda 函数的返回类型是'void'


[]() { ++global_x; }  // 没有参数,仅访问某个全局变量
[]{ ++global_x; }     // 与上一个相同,省略了()

//太厉害了。

//给出了返回类型的
[](int x, int y) -> int { int z = x + y; return z; }

上面是给出了返回类型->int,如果什么也不返回->void可以省略。

3.[]的作用

这里主要是为了让lamda表达式可以访问外面的元素。根据设置的不同可以分为按值、引用等。

传递[this]的作用,[this] 的作用是捕获当前对象的指针,使得 lambda 表达式可以访问当前对象的成员变量和成员函数。这在类的成员函数中使用 lambda 表达式时非常有用,因为它允许在 lambda 中使用当前对象的成员,而无需显式传递当前对象的指针。例子: 

class MyClass {
public:
    void exampleFunction() {
        int x = 42;

        // Lambda 表达式捕获外部变量 x 和当前对象的指针
        auto lambda = [this, x]() {
            // 在 lambda 中可以访问当前对象的成员变量
            std::cout << "Member variable: " << memberVariable << std::endl;

            // 在 lambda 中可以调用当前对象的成员函数
            memberFunction();

            // 在 lambda 中可以访问外部变量 x
            std::cout << "External variable x: " << x << std::endl;
        };

        // 调用 lambda 表达式
        lambda();
    }

private:
    int memberVariable = 10;

    void memberFunction() {
        std::cout << "Member function called." << std::endl;
    }
};

//运行结果:
Member variable: 10
Member function called.
External variable x: 42

  

posted @ 2020-10-09 22:04  lypbendlf  阅读(143)  评论(0编辑  收藏  举报