C++ lambda 表达式/函数
发布时间:2020-12-16 09:15:27 所属栏目:百科 来源:网络整理
导读:C++ lambda 表达式/函数 一. 简介 lambda 可以方便地定义和创建匿名函数。 ? 二. 语法 [capture list] (params list) mutable exception- return type { function body } 各项具体含义如下 capture list:捕获外部变量列表 params list:形参列表? ? ? (可
C++ lambda 表达式/函数一. 简介lambda 可以方便地定义和创建匿名函数。 ? 二. 语法[capture list] (params list) mutable exception-> return type { function body }
各项具体含义如下
? 1. 捕获外部变量通过在最前面的方括号中输入一些特殊符号,明确指出哪些外部变量可以被lambda函数捕获。 (1) 值捕获[变量名]函数体内不能改变捕获变量的值,否则会引起编译错误。相当于函数参数中的值传递,会对值进行一个拷贝。 int main() { int a = 123; auto f = [a] { cout << a << endl; }; a = 321; f(); // 输出:123 }
(2) 引用捕获[&变量名]相当于函数参数中的引用传递,不会做拷贝,其值会随外部的变量改变而改变。在函数体内可以对变量进行修改。 int main() { int a = 123; auto f = [&a] {
(3) 隐式捕获 [=] [&]?[] 中不写明变量名,具体捕获哪个变量有函数体内的语句自动判断。也有两种捕获方式: [=]:值捕获所有外部变量,同(1)值捕获 [&]: 引用捕获所有外部变量,同(2)引用捕获 ? (4) 混合方式,以逗号分离不同的方式
(5) 关键字,修改值捕获变量,mutable如果加mutable关键字,则表明参数的括号()不能省 int main() { int a = 123; auto f = [a]()mutable { cout << ++a; }; // 不会报错 cout << a << endl; // 输出:123 f(); // 输出:124 } ? ? 2. 形参列表
? 二. 示例1. 作为stl算法的输入: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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |