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

Ver*_*ová 2 c++ lambda c++11

可能重复:
C++ 11中的lambda表达式是什么?

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

int i = ([](int j) { return 5 + j; })(6);
Run Code Online (Sandbox Code Playgroud)

为什么我得到11?请解释这个表达方式.

cdh*_*wie 12

[](int j) { return 5 + j; }是一个lambda,它接受int一个参数并调用它j.它为此参数添加了5并返回它.在(6)表达后,立即调用拉姆达,所以你加入6和5在一起.

它大致相当于这段代码:

int fn(int j) {
    return 5 + j;
}

int i = fn(6);
Run Code Online (Sandbox Code Playgroud)

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

  • 与C#不同,C++不会自动捕获外部作用域中的变量.`[]`包含要捕获到内部作用域的外部作用域中的变量列表.您可以按值或按引用捕获事物.(通过引用捕获时,使用C++引用捕获事物;函数本地的生命周期不像C#中那样在C++中扩展.)在这种特殊情况下,lambda不从外部作用域捕获任何内容. (5认同)