C ++ lambda表达式(匿名函数)[重复]

Posted

技术标签:

【中文标题】C ++ lambda表达式(匿名函数)[重复]【英文标题】:C++ lambda expression (anonymous function) [duplicate] 【发布时间】:2012-09-27 17:49:22 【问题描述】:

可能重复:What is a lambda expression in C++11?

我在 C++ 中发现了这个表达式(C++11 最令人兴奋的特性之一):

int i = ([](int j)  return 5 + j; )(6);

为什么我得到 11?请解释一下这个表达式。

【问题讨论】:

【参考方案1】:

[](int j) return 5 + j; 是一个 lambda,它接受 int 作为参数并将其称为 j。它将 5 添加到此参数并返回它。表达式后面的 (6) 立即调用 lambda,因此您将 6 和 5 加在一起。

大致相当于这段代码:

int fn(int j) 
    return 5 + j;


int i = fn(6);

当然,除了它不创建命名函数。智能编译器可能会内联 lambda 并进行常量折叠,从而简单地减少到 int i = 11;

【讨论】:

作为 C++ 的涉足者和当前的 C# 开发人员,[] 表示什么?每当我看到括号,我就会想到数组。 与 C# 不同,C++ 不会自动捕获外部作用域中的变量。 [] 包含要捕获到内部范围的外部范围中的变量列表。您可以通过值或引用来捕获事物。 (通过引用捕获时,使用 C++ 引用捕获事物;函数局部变量的生命周期在 C++ 中不会像在 C# 中那样扩展。)在这种特殊情况下,lambda 不会从外部范围捕获任何内容。 很酷的东西。谢谢你的解释!

以上是关于C ++ lambda表达式(匿名函数)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

匿名函数

匿名函数lambda python

Python 3 之 lambda匿名函数详解

5Lambda表达式

Lambda表达式

C++11新特性:12—— C++11 lambda匿名函数用法详解