【问题标题】:Explain the "=" sign parameter in this Concurrency::Task call解释此 Concurrency::Task 调用中的“=”符号参数
【发布时间】:2015-12-29 04:35:53
【问题描述】:

有人可以向我解释一下这段代码中“=”参数的用途吗? 我可以使用哪些其他参数来代替=?它会有什么不同? MSDN 对这个主题不是很清楚。

//Declaration
auto prerequisite = task<void>([](){});

//Here is where I don't understand the '=' parameter
prerequisite.then([=](task<void> prerequisite){/*custom code goes here*/})

【问题讨论】:

  • 这是一个 lambda,不是吗? Lambda syntax.
  • 我相信 lambda 只是参数的类型名称......但话又说回来,我不完全确定。
  • '=' 基本上是 lambda 捕获子句 - 这意味着对象将在 lambda 生成的结果函数对象类中按值传递
  • 谢谢普拉瓦!!!!现在我明白了,这是一个非常酷的概念。

标签: c++ windows concurrency task ppl


【解决方案1】:

在 lambda 引入器(lambda 开头的括号)内,您可以指定一个捕获到 访问未作为参数传递的外部范围的数据:

• [=] 表示外部作用域按值传递给 lambda。因此,您可以阅读但不能 修改定义了 lambda 的所有可读数据。

• [&] 表示外部作用域通过引用传递给 lambda。因此,您可以对定义 lambda 时有效的所有数据进行写访问,前提是您在那里具有写访问权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多