代码之家  ›  专栏  ›  技术社区  ›  user1244932

\[=\]与\[这个\]有什么区别?

  •  0
  • user1244932  · 技术社区  · 4 年前

    在某些项目中发现了这样的修复:

    -        use([=](Foo* &df) {
    +        use([this](Foo* &df) {
                 delete df;
                 df = nullptr;
             });
    

    哪里 use 是:

            template<class LAMBDA>
            void use(LAMBDA callback) {
                LOCK lock(this->mutex);
                callback(this->data);
            }
    

    这里发生了什么,为什么 [=] [this] 有所作为? 是 this 只是一个指针,所以应该按值复制 [=] 应等同于 [这个] , 或与 [=] 被指向的物体 是按价值复制的吗?

    0 回复  |  直到 4 年前
        1
  •  1
  •   eerorika    4 年前

    this 不是变量(它是关键字)。因此,捕获变量的正常规则不适用。两者都捕获了默认值和;和=捕捉所指向的对象 *this 通过引用。自C++20以来,隐式捕获 *这个 当使用=capture时,默认设置已被弃用。

    使用默认捕获与使用默认捕获之间的明显区别 前者隐式地捕获了lambda中使用的任何局部变量,而后者则没有。

    对于所示的lambda,它似乎没有使用任何捕获,因此任何捕获声明似乎都是多余的。