【发布时间】:2017-01-07 08:30:21
【问题描述】:
我看到很多关于广义 lambda 捕获用于各种事物的问题,但没有任何东西能准确解释它们是什么或为什么将它们添加到标准中。
我已经阅读了似乎是document describing the updated to the standard necessary for generalized lambda captures to exist 的内容,但它并没有真正说明它们的创建原因,也没有真正很好地总结它们的工作原理。主要是一堆干巴巴的“在此处删除并在此处添加该语言”的东西。
那么,它们是什么?我为什么要使用一个?他们遵循什么规则?例如,它似乎允许捕获表达式。何时评估这些表达式?如果它们导致副作用,这些副作用何时生效?如果评估多个表达式,是否有保证的评估顺序?
【问题讨论】:
-
据我了解(我可能是错的)广义 lambda 捕获严格是为了能够将右值引用传递给 lambda,同时保留其右值引用属性(右值引用类型),但不确定是否它涵盖了 C++11 中尚未提供的更多内容
-
@Peter - 是的,或多或少。它们是复杂的野兽,但我使用过它们,并且基本了解它们的工作原理。以及我使用 lambda 的示例:bitbucket.org/omnifarious/sparkles/src/…
-
希望结束这个问题的人请在评论中建议如何改进它?
-
对于几乎所有关于新功能的纯文字论文,都有一篇(通常是较早的)包含设计描述的论文。在这种情况下,它是N3610。