2016-04-03 56 views
3

我想知道標準是否允許您通過參考使用=通過所有成員。因此,舉例來說,這部作品Lambda參考

int i = 0; 
auto f = [&i]() { 
    i = 1; 
}; 

然而,這並不而且也不把一個&=的後面。

int i = 0; 
auto f = [=]() { 
    i = 1; 
}; 

回答

8

你的意思是:

int i = 0; 
auto f = [&]() { 
    i = 1; 
}; 

[=]捕獲由值在lambda體內提到的一切。

[&]通過參考捕捉lambda身體中提及的所有內容。

+0

啊哈!謝謝。 –

1

在該λ表達式

int i = 0; 
auto f = [=]() { 
    i = 1; 
}; 

捕獲變量i是拉姆達的數據成員拉姆達內被改變。所以,你必須寫

int i = 0; 
auto f = [=]() mutable { 
    i = 1; 
}; 

如果您想通過引用的我會被捕獲,你應該寫

int i = 0; 
auto f = [=,&i]() { 
    i = 1; 
};