【发布时间】:2019-07-26 10:57:51
【问题描述】:
我正在学习 lambda。
但我有一个问题。
#include <iostream>
using namespace std;
int main() {
int x = 10;
auto l1 = [&](){
x = 5;
return x;
};
auto l2 = [&, x = x + 100](){
return x;
};
cout << l1() << endl;
cout << "main x : " << x << endl;;
cout << l2() << endl;
cout << "main x : " << x << endl;;
return 0;
}
这段代码的输出是:
5
main x : 5
110
main x : 5
为什么不是这个输出?
5
main x : 5
105
main x : 5
因为inline,输出会是这样吗?
【问题讨论】:
-
你的问题好像少了一个问题。
-
请花一些时间阅读the help pages、阅读the SO tour、阅读有关how to ask good questions 以及this question checklist 的信息。
-
你没有问任何问题,但我猜你想知道为什么
l2()打印 110 而不是105。因为当l2被构造时x仍然是10。x在调用l1时更改为5- 在l2构造之后会发生什么。
标签: c++ lambda scope reference initialization