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

时间:2016-03-16 21:32:34

标签: c++ templates sfml

当我遇到一系列从未出现过场景的代码时,我正在使用SFML进行一些游戏。完整的东西是SFML Game Development,但具体的符号是[=],这里是代码的简化形式。

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

我认为我明白了代码的重点但是等号周围的括号有什么意义?我没有在任何网站上发现它,除非我只使用了糟糕的搜索词。

1 个答案:

答案 0 :(得分:4)

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

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

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

在你的情况下,它没有任何效果,因为没有这样的符号。更有可能的是,它是一个草率的编程实践,已被任何人编写。或者有时需要它,这是一个复制粘贴宿醉。

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