C++的lambda表达式在需要函数对象的模板中非常方便,但遗憾的是,它们不能被默认构造。
正如这个问题所讨论的那样,对于有非空捕获列表的lambda表达式来说,这是有道理的。
Kerrek解释道:
The code doesn't make sense. Imagine you have a capturing lambda like this:
{ int n = 0; auto t = [&n](int a) -> int { return n += a; }; }
What could it possibly mean to default-construct an object of type decltype(t)?
空捕获列表的lambda表达式是否也无法进行默认构造?这是因为有什么理由呢?除了“标准规定”外还有什么其他原因吗?
std :: function
时,为什么要这样做? - 101010decltype(t)
。在这种情况下,Lambda比std::function
更可取,因为std::function
会引入不必要的间接性(我们知道我们想要什么函数,而且我们不会改变主意),而且Lambda定义可以直接放在使用它的地方。 - Praxeolitic