为了保障效率和正确,一般会在 lambda 中以引用的形式捕获变量,在 lambda 内局部使用。尤其是编写和调用并行算法时,因为在函数返回时会 join ,捕获了的变量可以在局部进行使用。

效率性方面,因为对大部分类型来说,引用传递比值传递效率高。

正确性方面,因为不少函数调用会修改对象,产生一些 side effect,值传递无法做到。

所以也就不能避免在 lambda 内会有 side effect。

以下我们假设 message 是一个很大的网络消息对象,传递给迭代算法,如果每次调用都以复制的方式传递,效率不高,且不一定可行,因为消息对象不一定提供复制构造函数。

以下是一个 three-stage parallel pipeline。每个 stage 对象封装了一个工作线程和一个队列。其析构函数会自动等待队列为空才执行。

警告:如果 lambda 捕获了外部变量的引用,但是在函数作用域外使用。