Lambda函数给出了意外的输出

我正在https://shaharmike.com/cpp/lambdas-and-functions/上浏览 lambda 函数,发现下面的代码。

int i = 0;
auto x = [i]() mutable { cout << ++i << endl; };
x();
cout << i << endl;
auto y = x;
x();
y();

输出:

1
0
2
2

无法理解为什么最后 2 个语句被打印为 2 和 2。即使“i”是可变的,它也不会影响 lamda 函数之外的 i 值。所以,x() 和 y() 应该打印 1 和 1。任何人都可以解释为什么它打印 2 和 2。

回答

x有一个副本i。我会叫它x.i

x(); -- prints ++x.i, aka 1
cout << i; -- prints i, aka 0
auto y = x; -- copies x into y.  x.i is 1, y.i is also 1.
x(); -- prints ++x.i, aka 2
y(); -- prints ++y.i, aka 2


以上是Lambda函数给出了意外的输出的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>