标准是否指定按值捕获的lambda是捕获父对象还是仅捕获正在访问的成员?

时间:2012-11-26 17:32:06

标签: c++ c++11 lambda

第一个例子:

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成员是否会被复制?

1 个答案:

答案 0 :(得分:1)

假设myState是一个局部变量(在函数体中定义),myState将被捕获; lambda只能捕获整个变量,而不是零碎。

如果按原样拍摄示例,则不会捕获任何内容; lambdas无法捕获全局变量。