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

the*_*ude 1 c++ templates sfml

当我遇到一行我从未见过的代码时,我正在使用 SFML 开发一个游戏,并且正在阅读一些教程。完整内容在SFML 游戏开发,但特定符号是 [=],这里是代码的简化形式。

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

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

pad*_*ddy 5

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

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

[x] (data_type1 y)
{
    DoSomethingElse(x, y);
};
Run Code Online (Sandbox Code Playgroud)

在您的情况下,它没有任何影响,因为没有这样的符号。更有可能的是,这是一种草率的编程实践,被编写它的人所采用。或者有时需要它,这是复制粘贴的宿醉。

我应该补充一点,如果foo并且DoSomething实际上是类中的方法,则可能会使用它。在这种情况下,=将自动捕获this,并解析到正确的调用DoSomething