C ++ lambda和运算符语法

时间:2017-08-21 20:23:32

标签: c++ lambda overloading operator-keyword

我上次在2003年使用过C ++,我正在尝试重温,并学习新的东西。已经在Java工作了一段时间,并且只是学习它的Lambda语法。在C ++中看到这个例子,并想知道是否有人可以解释它:

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

int i = 42;
char code = 'c';

[=, &i]() mutable
{
    i++;
    code = 'd';
    std::cout << "i: " << i << "code " << code << std::endl;
}();


void wait()
{
    cin.clear();
    cin.ignore();
    cin.get();
}

int main()
{
    std::cout << "i: " << i << "code " << code << endl;


    // hold output window open
    wait();
    return 0;
}

这是operator = overload的新lambda语法吗?我会写一个测试函数,但不知道如何调用它。

4 个答案:

答案 0 :(得分:0)

=表示它将按值捕获所有变量,&i指定必须通过引用捕获i

mutable表示它可以更改输入参数值。由于没有,这根本没有效果。

答案 1 :(得分:0)

lamda之前的

[]是lambda的捕获列表。如果它显示[=],它将按副本捕获lambda中使用的所有自动变量。在您的情况下,这将意味着i被引用捕获,而code(lambda中使用的另一个自动变量)被副本捕获。

mutable意味着可变地捕获变量,因此lambda可以更改捕获的变量。但是这里的lambda不会改变任何捕获的变量......

答案 2 :(得分:0)

我无法回复评论,因为我仍然没有50个代表点(我以前的答案会自动转移到评论中,因为它只是一个链接)。

我找到了一种测试lambda表达式的简单方法,但我完全不理解你的代码示例的目的,所以我在这里发布它。我希望它有所帮助,它来自Book SFML Game Development,并使用std::functions

int add(int a, int b) { return a + b };
// Assign a lambda expression to a function
std::function<int(int, int)> adder1 = [] (int a, int b) { return a + b; };

int sum = adder1(3, 5); // same as add(3, 5)

答案 3 :(得分:0)

感谢大家的帮助。在此处找到详细说明:section "How are Lambda closures implemented"