我寫,所以我決定用G ++來看看幾個簡單的例子是傳遞給lambda表達式的引用代碼 - 7傳引用和指針lambda表達式
代碼:
int i = 2;
auto f = [i]() {
printf("i = %d\n", i);
};
printf("incrementing i to %d\n", ++i);
f();
打印
incrementing i to 3
i = 2
如預期,因爲LAMDA使i
副本後和:
int i = 3;
int& j = i;
auto g = [j]() {
printf("j = %d\n", j);
};
printf("incrementing i to %d\n", ++i);
g();
打印
incrementing i to 4
j = 3
尚未:
i = 4;
int* k = &i;
auto h = [k]() {
printf("*k = %d\n", *k);
};
printf("incrementing i to %d\n", ++i);
h();
打印
incrementing i to 5
*k = 5
現在通常引用的行爲一樣,不需要解除引用(且不能更改)的指針,但與lamda捕獲這並非如此。 這是標準的預期行爲,如果是這樣,爲什麼這與正常參考行爲有所不同?
引用不像指針一樣行爲,它們的行爲與它們引用的對象相似。 '[j](){}'和'[i](){}'完全一樣。 – molbdnilo
真正的東西,你還沒有設法瞭解,但與lambdas無關,但與參考。我最近寫了一個[小解釋](https://stackoverflow.com/a/45825892/6639082),我希望它能讓你更好地理解C++參考。 – WindyFields