lambda表达式

《C++ primer》 10.3.2章节

 

1、lambda表达式可以看做匿名的内联函数;

2、lambda表达式可以像普通函数一样直接调用:

    auto fun = [&w]
    {
        qDebug()<<"ddddddddddddd";
    };
    fun();

3、捕获方式([]称为捕获列表):

  • 值捕获
    int i = 8;
    auto fun = [i]
    {
        qDebug()<<"i = "<

引用捕获

    int i = 8;
    auto fun = [&i]
    {
        qDebug()<<"i = "<

隐式捕获

    auto fun = [&]
    {
    };

 使用引用捕获lambda表达式所在函数的参数。

    auto fun = [=]
    {
    };

 使用值捕获lambda表达式所在函数的参数。

如果显示隐式混用,那“=”或“&”要放在前面。

    auto fun = [=,i]
    {
    };

    auto fun = [&,i]
    {
    };

4、定义的lambda表达式,编译器都会为该表达式生成一个新的数据类型,lambda表达式的捕获列表会作为该类型对象的初始化列表。

    auto fun = [&i]
    {
        qDebug()<<"a = "<

编译会为lambda表达式fun创建一个新的数据类型。

5、mutable关键字

上面的捕获方式中,如果是引用传递,那么lambda表达式中可以修改传入的变量值。如果是值传递,那默认是不能修改值的,如果要修改必须加上mutable关键字:

    int i = 8;
    auto fun = [i]()mutable
    {
        ++i;
    };
    fun();
    qDebug()<<"i = "<

 

你可能感兴趣的:(C++日常)