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表达式(匿名函数)[重复]的主要内容,如果未能解决你的问题,请参考以下文章