c++ lambda逃逸
时间: 2024-01-10 08:03:51 浏览: 167
C++ Lambda Story - From C++98 to C++20.pdf
C++ lambda逃逸指的是lambda表达式在其定义的作用域之外被使用的情况。当lambda表达式被传递给一个函数或存储在一个容器中时,它就会逃逸。逃逸的lambda表达式需要在堆上分配内存,因此可能会导致性能问题。
以下是一个lambda逃逸的例子:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v{1, 2, 3, 4, 5};
int sum = 0;
std::for_each(v.begin(), v.end(), [&sum](int n){ sum += n; });
std::cout << "Sum: " << sum << std::endl;
return 0;
}
```
在这个例子中,lambda表达式被传递给了`std::for_each`函数,因此它逃逸了。
为了避免lambda逃逸,可以使用`std::function`或函数指针来存储lambda表达式,或者将lambda表达式定义为非逃逸的。
阅读全文