C++ lambda

来源:互联网 发布:知乎电脑客户端 编辑:程序博客网 时间:2024/06/02 10:06

C++11 的 lambda 表达式规范如下:

[capture](parameters) mutable exception attribute ->retury-type {statement}


其中, 

mutable 修饰符说明 lambda 表达式体内的代码可以修改被捕获的变量,并且可以访问被捕获对象的 non-const 方法。

exception 说明 lambda 表达式是否抛出异常(noexception),以及抛出何种异常,类似于void f() throw(X, Y)

attribute 用来声明属性。

capture 捕捉列表, 能够访问一些上下文中的数据以供Lambda函数使用, 可以有以下集中形式:

[]        // 不捕获任何外部变量

[a]  // 以值的形式捕捉外部变量a

[=]      // 以值的形式捕获所有外部变量

[&]      // 以引用形式捕获所有外部变量

[x, &y]  // x 以传值形式捕获,y 以引用形式捕获

[=, &z] // z 以引用形式捕获,其余变量以传值形式捕获

[&, x]   // x 以值的形式捕获,其余变量以引用形式捕获

[this] 捕获当前类中的this指针,如果已经使用了&或者=就默认添加此选项

#include <iostream>int main() {    int n = 100;    auto f = [n](int k) { return n + k ; };    std::cout << f(3) << endl;    auto b = 3;    auto b2 = [n, &b] (int c) -> int{ // n只读, b读写        b = c*2;        return n + c;    }(1000);    std::cout << n << std::endl;        std::cout << b << std::endl;    std::cout << b2 << std::endl;//int sum = 10;//cout << [&](int n) { return sum += n * n;}(10);//cout << "\n";//cout << sum;////cout << "\n";//int t = 1;//cout << [=](int n) mutable { return t += n * n;}(10);//cout << "\n";//cout << t;////cout << "\n";//int a = 3, b = 4;//cout << [=, &b](int n) { return b += n * n + a;}(10);//cout << "\n";//cout << b;}







0 0