为什么闭包类型/ lambdas 在 C++ 中没有默认构造函数

Vin*_*ent 6 c++ lambda closures default-constructor c++14

lambdas 没有默认构造函数的原因是什么?这背后是否有任何技术原因,还是纯粹的设计决定?

Jim*_*yNJ 2

C++ 中的 Lambda 是一种语法便利,允许程序员避免使用传统语法(如

struct my_functor
{
bool operator()(Object &) { /* do something */ return false; }
}
Run Code Online (Sandbox Code Playgroud)

因为对于简单的函数来说,使用这种语法编写函子被认为太冗长了。

Lambda 提供参数捕获选项,例如 [=]、[&] 等,以节省您声明变量并初始化它们的时间,就像您在仿函数对象的构造函数中所做的那样。

因此,Lambda 在设计上不会向您公开任何构造函数语法。

没有任何技术原因导致 lambda 函数无法公开构造函数,但是如果这样做,它将停止模仿其命名的设计概念。


感谢该问题下的评论者。

  • 不过,Lambda 确实公开了复制和移动构造函数。 (3认同)