【问题标题】:C++ lambda expression (anonymous function) [duplicate]C ++ lambda表达式(匿名函数)[重复]
【发布时间】: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?请解释一下这个表达式。

【问题讨论】:

    标签: c++ lambda c++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 不会从外部范围捕获任何内容。
    • 很酷的东西。谢谢你的解释!