是否有一个原因是带有空捕获列表的lambda不能默认构造?

时间:2015-10-23 20:15:11

标签: c++ c++11 lambda

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;标准所说"?

1 个答案:

答案 0 :(得分:4)

一般情况下,lambdas尽可能少地指定解决特定用例。

其他可能有用的东西,例如“只复制普通可复制数据的lambda必须可以轻易复制”也被省略了。 (该标准没有规定lambda是否可以轻易复制)

好处是它使lambda更容易实现,这很重要。缺点是这排除了某些不在“预期”集合中的用途。

如果您认为“无捕获的lambda必须具有零参数构造函数”是一件重要的事情,请提出建议。但是这需要使用lambdas(简单的本地捕获和函数对象的创建)并将其转换为其他东西(轻松创建可以传递类型的无状态函数对象)。