2017-03-22 67 views
1
int a = 3; 
auto f = [a] (int a) { return a > a; } 

問:捕獲局部變量名稱a和lambda有區別的方法嗎?C++ lambda捕獲局部變量如參數名稱

我認爲它在參數範圍內a是獨立於外部局部變量a,想知道是否有像這樣的指針有區別。

回答

3

當編譯器處理lambda時,它所做的基本上是創建一個特殊的類,它實例化。實際的lambda函數變成一個operator()函數,捕獲的變量變成這個特殊類中的成員變量。

這意味着正常的範圍規則適用,其中局部變量和參數會影響成員變量。

所以在你的情況下,a是參數,而不是捕獲的變量。