[=] 和 [this] 有什么区别?

用户1244932

在一些项目中找到了这样的修复:

-        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只是一个指针,所以应该按值复制,并[=]应等同于[this]或与[=]该被指向的对象this是按值复制?

埃罗里卡

this不是变量(它是关键字)。因此,捕获变量的正常规则不适用。capture-defaults & 和 = 都通过引用捕获thisie指向的对象*this从 C++20 开始,*this不推荐使用 when using = capture-default的隐式捕获

使用 capture-default 与使用 capture-default 之间的明显区别在于this,前者隐式地捕获 lambda 中使用的任何局部变量,而后者则没有。

在显示的 lambda 的情况下,它似乎没有使用任何捕获,因此任何捕获声明似乎都是多余的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章