C++ 中不熟悉的符号 [=]

Unfamiliar symbol [=] in C++

我正在使用 SFML 开发一个游戏,当我 运行 进入我从未遇到过的代码行时,我正在学习一些教程。完整的东西在 SFML Game Development 但具体的符号是 [=] 这里是代码的简化形式。

template <typename data_type, typename Function>
std::function<void(data_type1&)> foo(Function x)
{
    return [=] (data_type1 y)
    {
        DoSomething(y);
    };
}

我想我明白了代码的要点,但是等号两边的括号有什么意义?我没有在任何网站上找到它的提及,除非我使用了糟糕的搜索词。

方括号表示 lambda 函数的捕获项。如果将 = 放入其中,则表示自动捕获(按值)lambda 中使用的所有符号。捕获意味着这些变量可以在 lambda 中使用,而不是函数参数。

假设您在 lambda 中使用传递给 foo 的变量 x。然后 x 的值将自动在 lambda 中捕获,并可以通过相同的名称访问。更明确的方法是指示要捕获 x

[x] (data_type1 y)
{
    DoSomethingElse(x, y);
};

在你的情况下它没有任何效果,因为没有这样的符号。更有可能的是,它是一种草率的编程习惯,被编写它的人所采用。或者有的时候需要,这就是复制粘贴宿醉

我应该补充一点,如果 fooDoSomething 实际上是 class 中的方法,则可以使用它。在这种情况下,= 会自动捕获 this,并解析为对 DoSomething

的正确调用