C++ lambda 捕获 - 哪个被捕获?
C++ lambda capture - which get's captured?
所以我在 class 中有下面的表达式,定义如下:
std::vector<std::function<MyClass (const MyClass&)>> funcVec;
result->funcVec.push_back([=](const MyClass& child){
return this->funcVec[i](child);
});
(例如,将 (this) 的 lambda 求值复制到结果实例)
问题是我不确定哪个被值捕获 - 整个对象 (this),可能是 i 还是只是函数 (ths->funcVec[i])?
我们非常欢迎任何关于为什么不使用它的额外解释和建议,或者确认这是可以的。
可以捕获的是局部自动变量,按值或引用,指针this
,仅按值。您的 lambda 使用 i
和 this
,因此它们被捕获(假设 i
是局部变量)。您指定了按值默认捕获,[=]
,因此两者都按值捕获。
只要在调用 lambda 时对象 *this
仍然存在就可以了。
所以我在 class 中有下面的表达式,定义如下:
std::vector<std::function<MyClass (const MyClass&)>> funcVec;
result->funcVec.push_back([=](const MyClass& child){
return this->funcVec[i](child);
});
(例如,将 (this) 的 lambda 求值复制到结果实例)
问题是我不确定哪个被值捕获 - 整个对象 (this),可能是 i 还是只是函数 (ths->funcVec[i])?
我们非常欢迎任何关于为什么不使用它的额外解释和建议,或者确认这是可以的。
可以捕获的是局部自动变量,按值或引用,指针this
,仅按值。您的 lambda 使用 i
和 this
,因此它们被捕获(假设 i
是局部变量)。您指定了按值默认捕获,[=]
,因此两者都按值捕获。
只要在调用 lambda 时对象 *this
仍然存在就可以了。