std::function<void()> create_function (args...)
{
int x = initial_value (args...);
return [x] () mutable
{
std::cout << x++ << std::endl;
};
}
我发现我需要在lambda上使用mutable
关键字,否则x
是const。
如果我多次调用create_function
,返回的函数对象将每个都有自己的x
副本还是被共享?
为了澄清,如果我想在C ++ 11之前使用这种功能,则必须编写一个类来封装捕获,在这种情况下,我可以选择使x
成为成员变量或全局/静态。如果x
是const没关系。该语言如何针对不同的lambda实例指定x
的存储方式?
答案 0 :(得分:3)
mutable
不会更改。它只会改变常数。
您指定要在lambda捕获中使用值(副本)还是引用:
return [x] () mutable // copies
{
std::cout << x++ << std::endl;
};
return [&x] () mutable // references
{
std::cout << x++ << std::endl;
};
如果您感到困惑,则Lambda捕获始终被建模为非静态数据成员。