[英]about Initialized Captures of the C++14 lambdas
为什么 x 的值更新为 6,而 y 的值初始化为 7?
谁能给我一些线索?
int x = 4;
auto y = [&r = x, x = x+1]()->int {
r += 2;
return x+2;
}(); // Updates ::x to 6, and initializes y to 7.
在捕获组中:
[&r = x, x = x+1]
r
是对x
的引用,因此对r
的任何更改都会反映在x
中。 另一方面,捕获组中的左侧x
是x+1
的副本,其中右侧x
来自 lambda 外部。
由于混淆是由于 lambda 捕获语法与常规赋值语法不同,因此更改此副本的名称将使发生的事情更清楚:
int x = 5;
auto y = [&r = x, x_copy = x+1]() ->int { // x_copy is 5
r += 2; // changes x
return x_copy + 2; // returns 7
}();
这等效于您的示例,因此您可以看到对x
的唯一更改是通过r
,因此变为6
。 本地x_copy
初始化为5
,然后 lambda 返回x_copy + 2
,即7
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.