lamda表达式机制理解

#if 1
#include <iostream> 
using namespace std;

int fun(int a) {
    return a + 1;
}

int fun_(int &a) {
    return a + 1;
}

int main() {
    int a = 9;

    auto fun1 = [=]() { return a + 1; };
    auto fun2 = [&]() { return a + 1; };

    cout << "lamda 捕获" << endl;
    cout << fun1() << endl; // 10
    cout << fun2() << endl; // 10
    cout << "lamda 捕获" << endl;

    cout << "func 调用" << endl;
    cout << fun(a) << endl; // 10
    cout << fun_(a) << endl; // 10
    cout << "func 调用" << endl;

    cout << ++a << endl;

    cout << "lamda 捕获" << endl;
    cout << fun1() << endl; // 10
    cout << fun2() << endl; // 11
    cout << "lamda 捕获" << endl;

    cout << "func 调用" << endl;
    cout << fun(a) << endl; // 11
    cout << fun_(a) << endl; // 11
    cout << "func 调用" << endl;

    // 总结: Lambda表达式中的捕获是在定义时进行的,因此每个Lambda表达式只会捕获一次外部变量。 注意跟函数调用的区别

    return 0;
}
#endif

总结: Lambda表达式中的捕获是在定义时进行的,因此每个Lambda表达式只会捕获一次外部变量。 注意跟函数调用的区别

猜你喜欢

转载自blog.csdn.net/John_ToStr/article/details/130911962