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