【发布时间】:2011-09-07 03:46:31
【问题描述】:
我正在使用 Visual Studio 2010,它显然在 lambdas 上有一些错误的行为,并且有这个嵌套的 lambda,其中内部 lambda 返回一个包装为 std::function 的第二个 lambda(参见"Higher-order Lambda Functions" on MSDN):
int x = 0;
auto lambda = [&]( int n )
{
return std::function<void()>(
[&] // Note capture
{
x = n;
}
);
};
lambda( -10 )(); // Call outer and inner lambdas
assert( -10 == x ); // Fails!
这编译但在断言处失败。具体来说,内部 lambda 中的 n 未初始化(0xCCCCCCCC),但 x 已成功修改为其值。如果我将内部 lambda 的捕获子句更改为“[&,n]”,则断言按预期通过。这是 VS2010 的错误还是我不明白 lambda 捕获是如何工作的?
【问题讨论】:
标签: c++ visual-studio-2010 lambda c++11