C++的lambdas在需要函数对象的模板中使用会很方便,但是它们不能默认构造.
正如在这个问题中所讨论的,这对于具有非空捕获列表的lambda来说是有意义的.
Kerrek解释说:
代码没有意义.想象一下你有一个像这样的捕捉lambda:
Run Code Online (Sandbox Code Playgroud){ int n = 0; auto t = [&n](int a) -> int { return n += a; }; }默认构造一个decltype(t)类型的对象可能意味着什么?
带有空捕获列表的lambdas怎么样?有没有理由对默认构造没有意义?还有什么比"标准如此说"还要多吗?
一般来说,为了解决特定的用例,尽可能少地指定 lambda。
其他可能有用的东西,比如“只复制普通可复制数据的 lambda 必须是普通可复制的”也被省略。(该标准没有指定 lambda 是否可简单复制)
好处是它使 lambda 成为更容易实现的功能,这一点很重要。缺点是这排除了不在“预期”集中的某些用途。
如果您认为“无捕获 lambda 必须具有零参数构造函数”很重要,请提出它。但这需要使用 lambda(轻松本地捕获和创建函数对象)并将其变形为其他东西(轻松创建其类型可以传递的无状态函数对象)。
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |