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

时间:2020-05-27 12:19:27

标签: c++ c++17

在某些项目中找到了这样的修复程序:

-        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指向的对象?

1 个答案:

答案 0 :(得分:1)

this不是变量(它是关键字)。因此,捕获变量的常规规则不适用。捕获默认值&和=均捕获this指向的对象,即*this所引用。从C ++ 20开始,不建议使用= capture-default时*this的隐式捕获。

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

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