C ++的lambda可以方便地在需要函数对象的模板中使用,但是它们不能默认构造。
正如在这个问题中所讨论的,这对于具有非空捕获列表的lambda是有意义的。
Instantiating C++ lambda by its type
Kerrek解释道:
代码没有意义。想象一下,你有一个类似的捕捉lambda 这样:
{ int n = 0; auto t = [&n](int a) -> int { return n += a; }; }
默认构造一个类型的对象可能意味着什么 decltype(t)的
带有空捕获列表的lambdas怎么样?有没有理由对默认构造没有意义?除此之外还有什么比#34;标准所说"?
答案 0 :(得分:4)
一般情况下,lambdas尽可能少地指定解决特定用例。
其他可能有用的东西,例如“只复制普通可复制数据的lambda必须可以轻易复制”也被省略了。 (该标准没有规定lambda是否可以轻易复制)
好处是它使lambda更容易实现,这很重要。缺点是这排除了某些不在“预期”集合中的用途。
如果您认为“无捕获的lambda必须具有零参数构造函数”是一件重要的事情,请提出建议。但是这需要使用lambdas(简单的本地捕获和函数对象的创建)并将其转换为其他东西(轻松创建可以传递类型的无状态函数对象)。