【问题标题】:Unfamiliar symbol [=] in C++ [duplicate]C ++中不熟悉的符号[=] [重复]
【发布时间】:2016-03-16 21:32:33
【问题描述】:

我正在使用 SFML 开发一款游戏,正在阅读一些教程,但我遇到了一行我从未见过的代码。完整的内容在 SFML Game Development,但具体符号是 [=],这是代码的简化形式。

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

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

【问题讨论】:

标签: c++ templates sfml


【解决方案1】:

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

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

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

在您的情况下,它没有任何效果,因为没有这样的符号。更有可能的是,编写它的人已经采用了一种草率的编程实践。或者有时需要它,这是复制粘贴后遗症。

如果foo 和DoSomething 实际上是类中的方法,我应该补充一点。在这种情况下,= 将自动捕获this,并解析为对DoSomething 的正确调用

【讨论】:

  • 完美。搜索引擎的工作方式和删除字符的方式,所以它甚至不允许我在这个网站上搜索,但已经有人将它标记为重复的问题。
猜你喜欢
  • 2018-05-16
  • 2011-05-19
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 2017-08-03
  • 1970-01-01
相关资源
最近更新 更多