c++ - 该标准是否指定按值捕获的 lambda 是捕获父对象,还是仅捕获被访问的成员?

标签 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 成员?

最佳答案

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

如果您按原样使用示例,则不会捕获任何内容; lambda 无法捕获全局变量。

关于c++ - 该标准是否指定按值捕获的 lambda 是捕获父对象,还是仅捕获被访问的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13570068/

相关文章:

c++ - 保存图形到EEPROM,通过过滤器重复0x00和0xFF压缩图形以节省空间

c++ - C++没有匹配函数可解决调用错误(默认通过引用传递)

c++ - 如何在Qt代码中自定义一个QPushbutton

c++ - 移动构造函数调用基类移动构造函数

.net-4.0 - Lambda表达式-根据对象集合中另一个属性的值设置该对象集合中一个属性的值

c++ - 在多台计算机上同步相同的代码块文件

c++ - std::make_shared 是否执行值初始化(GCC 和 clang 不同意)?

c++ - 检索 libevent 连接信息时“转发结构声明”

c++ - Lambda 表达式( vector 之和)

c# - 参数化 LINQ GroupBy