第一个例子:
struct State
{
SomeLargeObjectThatTakesTimeToCopy obj;
int x;
} myState;
auto f = [=]() { return myState.x * 2; };
是否复制了整个 myState
结构,即使从技术上讲,只使用了 x
成员?
第二个例子:
struct State
{
struct SubState
{
int x;
};
std::vector<SubState> subStates;
} myState;
auto f = [=]() { return myState.subStates[0].x * 2; };
同样,是否复制了整个 myState
对象?如果不是,那么是否复制了整个 subStates
成员?
最佳答案
假设 myState
是一个局部变量(在函数体中定义),myState
将被捕获; lambda 只能捕获整个变量,而不是点点滴滴。
如果您按原样使用示例,则不会捕获任何内容; lambda 无法捕获全局变量。
关于c++ - 该标准是否指定按值捕获的 lambda 是捕获父对象,还是仅捕获被访问的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13570068/