具有“=”捕获和内存使用的 Lambda 函数

Lambda functions with "=" capture and memory usage

在我的脑海中,当我创建一个 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;};
}

不是吗?

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

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