当我看到以下工作时,我有点困惑
struct A {
void g(){}
void f(){
[&](){ g(); }();
}
};
但后来我找到this
了答案,它非常详细地解释了它是如何工作的。
从本质上讲,它归结为this
无论您使用[=]
还是[&]
.
但是,在cppreference上,我阅读了以下内容
(*this)
如果存在任一捕获默认值,则可以隐式捕获当前对象。如果隐式捕获,则始终通过引用捕获,即使捕获默认值为=
.
所以我有两个似乎是等价的公式
this
[=]
无论我们使用还是,都被价值捕获[&]
。(*this)
[=]
无论我们使用还是,都是通过引用捕获的[&]
。
首先,上面的两个公式确实是完全等价的吗?
我确实看到了两者之间的区别,如果不是在实际可能的情况下,至少在它们看起来有多有用方面。
配方 1 对我来说似乎很奇怪。为什么阻止我this
通过const
-reference 捕获?在性能方面,这两种情况应该没有什么大的区别,我总是可以auto const& This = this;
在 lambda 之前做,然后This
如果我愿意的话,可以通过引用捕获。至于悬空引用,如果我使用this
关键字,我在对象类中,那么当我在其中时,对象怎么会死呢?
另一方面,公式 2 似乎确实可以保护我免于制作不必要的副本,如果(*this)
在使用[=]
. 此外,如果我真的想要,还有一种用于(*this)
通过副本捕获的捕获语法,即[*this]
.