下面的代碼打印0,但我期望看到一個1.我的結論是lambda函數不會通過實際將捕獲的參數傳遞給函數來調用,直觀。我是對的還是缺少什麼?C++ 11通過值捕獲的lambda捕獲在聲明點
#include <iostream>
int main(int argc, char **argv){
int value = 0;
auto incr_value = [&value]() { value++; };
auto print_value = [ value]() { std::cout << value << std::endl; };
incr_value();
print_value();
return 0;
}
謝謝。我一直在思考價值,因爲價值的更新在功能之外是不可見的。但是,這聽起來像也意味着函數外部的更新在函數內部不可見。 – perreal 2012-07-22 10:49:30
這裏可能會誤導的是措辭:按價值意思是「生成副本」。 lambda具有變量的副本,它是在lambda的聲明處獲取的值。由於lambda具有私人副本,因此原始對象不會在lambda內部修改或讀取。這就是爲什麼實際上有一個通過引用被捕獲的原因,以允許你想要查看/修改原始的情況。 – Klaim 2012-07-22 11:56:06