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

问题描述:

为什么lambda没有缺省构造函数的原因是什么?这背后是否有任何技术原因,还是纯粹的设计决定?为什么闭包类型/ lambdas在C++中没有默认构造函数

+1

它的目的是什么?它是在你声明它时构造的。 – NathanOliver

+4

你在设想一个默认构造函数在做什么? –

+0

@NathanOliver,我会喜欢在[这个答案](http://*.com/a/41189224/434551)默认构造的lambda函数。把它看作指针的'nullptr'类似物。 –

lambda表达式在C++是一个语法上的方便,以允许程序员避免宣告使用传统的句法的算符等

struct my_functor 
{ 
bool operator()(Object &) { /* do something */ return false; } 
} 

因为使用此语法写入函子被认为太长篇大论为简单的功能。

Lambdas提供参数捕捉选项,例如[=],[&]等,以便为您节省声明变量并初始化变量,就像您在函子对象的构造函数中所做的那样。

因此,Lambdas不会向设计公开任何构造函数语法。

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


感谢评论员在这个问题下。

+1

评论Lambdas确实暴露复制和移动构造函数,但。 – AndyG