繁体   English   中英

关于 C++14 lambdas 的初始化捕获

[英]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中。 另一方面,捕获组中的左侧xx+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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM