捕獲示例
int i = 0;
int j = 0;
auto f = [t1 = i, &t2 = j]() {};
mutable
代碼
int main() {
int a = 0;
auto fun1 = [=]() mutable {
a = 1;
return a;
};
std::cout << "fun1-test:" << std::endl;
std::cout << fun1() << std::endl;
std::cout << a << std::endl;
auto fun2 = [=]() {
// 編譯錯誤:表達式必須是可修改的左值
// a = 2;
return a;
};
std::cout << "fun2-test:" << std::endl;
std::cout << fun2() << std::endl;
std::cout << a << std::endl;
auto fun3 = [&]() mutable {
a = 3;
return a;
};
std::cout << "fun3-test:" << std::endl;
std::cout << fun3() << std::endl;
std::cout << a << std::endl;
auto fun4 = [&]() mutable {
a = 4;
return a;
};
std::cout << "fun4-test:" << std::endl;
std::cout << fun4() << std::endl;
std::cout << a << std::endl;
return system("pause");
}
輸出結(jié)果
fun1-test:
1
0
fun2-test:
0
0
fun3-test:
3
3
fun4-test:
4
4
注意事項
- 不要用引用捕獲局部變量料身。
- lambda不需要捕獲靜態(tài)變量就可以直接使用边琉。
- 每一個lambda都是獨一無二的類型。
- 雖然不能按值捕獲數(shù)組,但是可以改用std::array。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者