有你的問題中的兩個問題:
- 我可以宣告提前自動變量(前初始化)
- 如何我存儲lambda函數
答案第一問題是'否':自動變量的聲明必須伴隨初始化。你不能有:
auto x; // error
x = 42;
本身,因爲編譯器不會知道在聲明什麼x應該是。在另一方面:
auto x = 42;
是有效的,因爲42爲int,所以編譯器分配對於x
對於第二個問題使用std ::函數的整數。它儘可能優化。有一些細節需要考慮。具體來說:代碼塊<代碼>指的是lambda函數範圍之外的變量。如果確實如此,你是否希望它通過值或引用來引用這些變量。所有這些變量都必須存儲在某處(a.k.a. capture),這就是std :: function的作用。如果你沒有任何捕獲,std :: function基本上是一個簡單的指向函數的指針,它是儘可能優化的。在頭有:
// with no capture:
std::function<void()> _myblock;
// if you have capture (say, two integers)
std::function<void(int,int)> _myblock
,並在源有:
// no capture:
_myblock = []() { <code> }
// with capture:
_myblock = [x,y](int x, int y) { <code> }
最後,作爲評論者之一指出,如果你沒有捕獲,做最好的事情是隻需將代碼<代碼>代入函數並稍後調用它。
來源
2012-10-14 14:33:49
Uri
請勿在名稱中使用雙下劃線。任何與這些保留的實施。無論如何,它總是會是一個具有相同函數簽名的lambda?如果是這樣,只需將其聲明爲適當的'std :: function'類型即可。 – chris
'auto'變量必須在創建時初始化。你不能像你那樣使用它。 – 0x499602D2
@chris:這是一個好主意,它可能適合OP的需求。但應該指出的是,它不是一回事,並且'std :: function'的性能特性比裸lambda差。 –