带有“=”捕获和内存使用情况的 Lambda 函数

iEP*_*CBM 0 c++ memory lambda

在我看来,当我创建 lambda 时,[=]{...}所有变量从父函数克隆到 lambda。

因此以下代码将使用太多内存,因为变量 a...z 将被复制到 lambda 函数:

void foo() {
    long double a = 0.123456789;
    long double b = 0.123456789;
    long double c = 0.123456789;
    //.... 
    long double z = 0.123456789;

    auto val = [=]() {return a+z;};
}
Run Code Online (Sandbox Code Playgroud)

是不是?

use*_*522 5

[=]将导致仅捕获 lambda 中实际使用的变量。

在您的情况下,将有和val的副本。假设没有填充(不应该有),那么.azsizeof(val) == 2*sizeof(long double)