C++11 Lambda : How to capture local variables inside Lambda ?
本文将介绍如何在lambda中从外部域捕获变量,同样的,我们可以以值传递或引用传递的方式捕获变量,以下是语法:
1 | [Captured variables](paameters) { function code } |
Capturing Local Variables by value inside Lambda Function
以下是以值传递捕获变量的方式:
1 | // Local Variables |
msg和counter都是const变量,只读不改。要想修改,可以加入关键字mutable:
1 | auto func = [msg, counter] () mutable { }; |
Capturing Local Variables by Reference inside Lambda
要实现引用传递,只需要加上前缀&即可。
1 | // Local Variables |
这样在lambda中就可以通过修改该引用从而修改外部值。
Capture All Local Variables from outer scope by Value
正如前面的文章提到过的,我们也可以把外部变量全部捕获,或值传递或引用传递,甚至可以混合使用:
1 | // Capturing all Local variables by Value |
Be-aware of capturing local variables by Reference in Lambda
如果在lambda中我们通过引用捕获局部变量,那么我们需要确保在访问或调用lambda函数时,所有引用捕获的局部变量仍然在作用域内。
如果该变量已经被回收或者从stack中移除,会导致undefined behavior。