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

Pra*_*tic 9 c++ lambda c++11

C++的lambdas在需要函数对象的模板中使用会很方便,但是它们不能默认构造.

正如在这个问题中所讨论的,这对于具有非空捕获列表的lambda来说是有意义的.

按类型实例化C++ lambda

Kerrek解释说:

代码没有意义.想象一下你有一个像这样的捕捉lambda:

{
    int n = 0;
    auto t = [&n](int a) -> int { return n += a; };
}
Run Code Online (Sandbox Code Playgroud)

默认构造一个decltype(t)类型的对象可能意味着什么?

带有空捕获列表的lambdas怎么样?有没有理由对默认构造没有意义?还有什么比"标准如此说"还要多吗?

Yak*_*ont 4

一般来说,为了解决特定的用例,尽可能少地指定 lambda。

其他可能有用的东西,比如“只复制普通可复制数据的 lambda 必须是普通可复制的”也被省略。(该标准没有指定 lambda 是否可简单复制)

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

如果您认为“无捕获 lambda 必须具有零参数构造函数”很重要,请提出它。但这需要使用 lambda(轻松本地捕获和创建函数对象)并将其变形为其他东西(轻松创建其类型可以传递的无状态函数对象)。