在我看来,当我创建 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)
是不是?
[=]将导致仅捕获 lambda 中实际使用的变量。
在您的情况下,将有和val的副本。假设没有填充(不应该有),那么.azsizeof(val) == 2*sizeof(long double)
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |