C ++ lambda表达式(匿名函数)

时间:2012-10-07 01:40:40

标签: c++ lambda c++11

  

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

我在C ++中找到了这个表达式(C ++ 11最激动人心的特性之一):

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

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

1 个答案:

答案 0 :(得分:12)

[](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;