美文网首页
Lambda表达式

Lambda表达式

作者: 陈成_Adam | 来源:发表于2021-02-13 20:46 被阅读0次

    [](){}是一个C++11下的Lambda表达式(匿名函数),当然[]{}也是一个Lambda表达式。

    Lambda表达式区别

    Lambda表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样具有返回值。Lambda表达式本质上与函数声明非常类似。lambda可以转换为std::function函数,但是它又与类型有所区别。使用typeid获取类型名字即使是相同的表达式,它们的名字也会不一样。

    typeid([](){}).name();
    typeid([](){}).name();
    

    Lambda表达式写法

    Lambda表达式

    (1) Capture子句,在 C++ 规范中也称为 lambda 引导;

    • []不捕获任何变量;
    • [&]捕获外部作用域中所有变量,并作为引用在函数体中使用(按引用捕获);
    • [=]捕获外部作用域中所有变量,并作为副本在函数体中使用(按值捕获)。

    (2) 参数列表(可选),也称为 lambda 声明符;
    (3) 可变规范(可选);
    (4) 异常规范(可选),可以填mutable, exception, attribute;

    • mutable: 说明lambda表达式体内的代码可以修改被捕获的变量,并且可以访问被捕获的对象的non-const方法;
    • exception: 说明lambda表达式是否抛出异常以及何种异常;
    • attribute: 用来声明属性。
      (5) 尾随返回类型(可选);
      (6) "Lambda 体"。

    Lambda表达式的使用示例

    (1) 通过std::function转换使用:

    std::function<int(int)> square = [](int i) -> int { return i * i; };
    square(1);
    

    (2) 通过auto转换使用:

    auto square = [](int i) -> int { return i * i; };
    square(1);
    

    (3) 直接使用:

    [](int i) -> int { return i * i; }(1);
    

    摘自:https://mp.weixin.qq.com/s?__biz=MzA4NTkzOTMxMw==&mid=2461804259&idx=1&sn=f59bcdb145f268e2e29945e1338cbe76&chksm=8898c3fdbfef4aebb78e33d29147e7b25db7206296c4be5ba148fc55e604315eaf4859e9b1d0&scene=21#wechat_redirect

    相关文章

      网友评论

          本文标题:Lambda表达式

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