标签:func apt 可变 cti main 算法 隐式 c++ 传递
lambda 可以方便地定义和创建匿名函数。
[capture list] (params list) mutable exception-> return type { function body }
各项具体含义如下
通过在最前面的方括号中输入一些特殊符号,明确指出哪些外部变量可以被lambda函数捕获。
函数体内不能改变捕获变量的值,否则会引起编译错误。相当于函数参数中的值传递,会对值进行一个拷贝。
int main() { int a = 123; auto f = [a] { cout << a << endl; }; a = 321; f(); // 输出:123 }
相当于函数参数中的引用传递,不会做拷贝,其值会随外部的变量改变而改变。在函数体内可以对变量进行修改。
int main() { int a = 123; auto f = [&a] {
a += 1;
cout << a << endl; }; a += 1; f(); // 输出:125 }
[] 中不写明变量名,具体捕获哪个变量有函数体内的语句自动判断。也有两种捕获方式:
[=]:值捕获所有外部变量,同(1)值捕获
[&]: 引用捕获所有外部变量,同(2)引用捕获
如果加mutable关键字,则表明参数的括号()不能省
int main() { int a = 123; auto f = [a]()mutable { cout << ++a; }; // 不会报错 cout << a << endl; // 输出:123 f(); // 输出:124 }
vector<int> myvec{ 3, 2, 5, 7, 3, 2 }; sort(myvec.begin(), myvec.end(), [](int a, int b) -> bool { return a < b; }); // Lambda表达式
16:25:40
标签:func apt 可变 cti main 算法 隐式 c++ 传递
原文地址:https://www.cnblogs.com/dylan-liang/p/11523277.html