首页 > 解决方案 > 为什么局部变量和成员变量的默认捕获不一致?

问题描述

我很好奇与传递默认参数不一致的背后是什么故事:

struct Example {
    void run() {
        int localVar = 0;
        auto l = [=](){
            // localVar = 100; Not allowed (const copy of localVar)
            memberVar = 100; // allowed (const copy of this pointer - NOT const *this copy)
            };
        l();
    }
    int memberVar = 1;
};

为什么不通过 const 值(包括 const *this)将所有参数传递给 lambda 捕获?

这是一个理想的设计选择,还是实施限制的结果?

编辑:

我知道指向对象的 const 指针作为参数传递,对象本身可以修改,但指针本身不能。但这是读者必须知道的实现细节,乍一看并不明显。从我的主观角度来看,将通过 const 值捕获 *this ......

标签: c++c++11c++17

解决方案


为什么局部变量和成员变量的默认捕获不一致?

因为默认捕获根本不捕获成员变量。捕获的是this指针。那就是“const”:你不能修改this. 但是在非常量成员函数中,它是指向非常量的指针,因此您可以修改非常量成员。


推荐阅读