【发布时间】:2019-04-22 14:56:34
【问题描述】:
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 的存储?
【问题讨论】:
-
简而言之:是的。
-
Lambda 没有静态捕获。无法使用 lambda 模拟您的静态成员。这很好,因为他们应该被排除在任何代码审查之外,有偏见。
-
实际上并不清楚您的静态/全局捕获将如何发挥作用以及它在什么情况下有用。
-
@n.m.谢谢你。你能引用标准吗?
-
没有一个短语说“lambdas 中没有静态/全局捕获”。它根本没有在任何地方提及。要验证它,您需要阅读整个标准。