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

Unfamiliar symbol [=] in C++

本文关键字:符号 不熟悉 C++      更新时间:2023-10-16

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

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实际上是类中的方法,则可以使用它。 在这种情况下,=将自动捕获this,并解析为正确的调用DoSomething