calstage1done();}; 但似乎也可以隐式使用它;例-6ren">
gpt4 book ai didi

c++ - 当 lambda 捕获 "this"时,是否必须显式使用它?

转载 作者:行者123 更新时间:2023-12-02 02:33:34 24 4
gpt4 key购买 nike

我发现在 lambda 中捕获 this 的示例显式地使用它;例如:

capturecomplete = [this](){this->calstage1done();};

但似乎也可以隐式使用它;例如:

capturecomplete = [this](){calstage1done();};

我在 g++ 中测试了它,并编译了它。

这是标准的 C++ 吗? (如果是,哪个版本),或者是某种形式的扩展?

最佳答案

这是标准的,自 C++11 添加 lambda 以来一直如此。根据cppreference.com :

For the purpose of name lookup, determining the type and value of the this pointer and for accessing non-static class members, the body of the closure type's function call operator is considered in the context of the lambda-expression.

struct X {
int x, y;
int operator()(int);
void f()
{
// the context of the following lambda is the member function X::f
[=]()->int
{
return operator()(this->x + y); // X::operator()(this->x + (*this).y)
// this has type X*
};
}
};

关于c++ - 当 lambda 捕获 "this"时,是否必须显式使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58804171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com