2016-12-16 72 views
2

爲什麼lambda沒有缺省構造函數的原因是什麼?這背後是否有任何技術原因,還是純粹的設計決定?爲什麼閉包類型/ lambdas在C++中沒有默認構造函數

+1

它的目的是什麼?它是在你聲明它時構造的。 – NathanOliver

+4

你在設想一個默認構造函數在做什麼? –

+0

@NathanOliver,我會喜歡在[這個答案](http://stackoverflow.com/a/41189224/434551)默認構造的lambda函數。把它看作指針的'nullptr'類似物。 –

回答

0

lambda表達式在C++是一個語法上的方便,以允許程序員避免宣告使用傳統的句法的算符等

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

因爲使用此語法寫入函子被認爲太長篇大論爲簡單的功能。

Lambdas提供參數捕捉選項,例如[=],[&]等,以便爲您節省聲明變量並初始化變量,就像您在函子對象的構造函數中所做的那樣。

因此,Lambdas不會向設計公開任何構造函數語法。

沒有任何技術上的原因,lambda函數無法公開構造函數,但是如果這樣做,它將停止模仿它命名的設計概念。


感謝評論員在這個問題下。

+1

評論Lambdas確實暴露覆制和移動構造函數,但。 – AndyG

相關問題