第一个例子:
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
成员是否会被复制?
答案 0 :(得分:1)
假设myState
是一个局部变量(在函数体中定义),myState
将被捕获; lambda只能捕获整个变量,而不是零碎。
如果按原样拍摄示例,则不会捕获任何内容; lambdas无法捕获全局变量。