优化网站建设,东胜做网站,网站建设方案书纯文字,赚钱黑渠道在 C 中#xff0c;匿名函数也被称为 lambda 表达式。C11 引入了 lambda 表达式#xff0c;使得在需要函数对象#xff08;函数符#xff09;的地方可以使用匿名函数来代替。
lambda 表达式的基本语法如下#xff1a;
[capture list] (parameter list) - return typ…在 C 中匿名函数也被称为 lambda 表达式。C11 引入了 lambda 表达式使得在需要函数对象函数符的地方可以使用匿名函数来代替。
lambda 表达式的基本语法如下
[capture list] (parameter list) - return type { // 函数体
}
其中capture list 用于指定需要捕获的外部变量可以是按值捕获或按引用捕获parameter list 是可选的用于指定函数的参数列表return type 也是可选的用于指定函数的返回类型函数体即为 lambda 函数的具体实现。
#include iostreamint main() {int x 10;int y 5;// 使用 lambda 表达式计算两个数的和auto sum [](int a, int b) { //此处的auto不能改成intreturn a b;};int result sum(x, y);std::cout Sum: result std::endl;return 0;
}
我们定义了一个 lambda 表达式 sum它接受两个参数并返回它们的和。然后我们调用该 lambda 表达式传入变量 x 和 y 的值并将结果打印出来。
除了上述示例中的基本用法C lambda 表达式还支持更多功能比如按值捕获、按引用捕获外部变量、指定返回类型、省略参数列表等。这些功能可以根据具体需求进行灵活使用。 auto sum [](int a, int b) { 此处的auto为什么不能改成int 不写auto的话要写成什么? #include iostreamint main() {int x 10;int y 20;int sum [](int a, int b) - int {return a b;}(x, y);std::cout Sum: sum std::endl;return 0;
} 1、按值捕获局部变量
# include iostream
using namespace std;
int main() {int x 10;int y 5;auto sum [x, y]() {return x y;};cout Sum: sum()endl;cout x: x , y: yendl;return 0;
}
在这个示例中我们使用按值捕获来捕获局部变量 x 和 y。lambda 函数 sum 返回它们的和。在主函数中我们调用 lambda 函数并打印结果。可以看到lambda 函数的执行不会改变原始的 x 和 y 变量。
2、按值捕获函数参数
#include iostream
using namespace std;void print(int x, int y) {auto product [x, y]() {return x*y;};cout Product: product() endl;
}int main() {print(2,3);return 0;
}
我们定义了一个函数 print它接受两个参数 x 和 y然后定义了一个 lambda 表达式 product用于计算这两个参数的乘积。可以看到我们在 lambda 表达式中使用了按值捕获来捕获函数参数。
3、按引用捕获全局变量
#include iostream
using namespace std;
int x 10;
int y 5;int main() {auto sum []() {return x y;};coutSum: sum() endl;x 1;y 2;coutsum: sum()endl;return 0;
}在这个示例中我们使用按引用捕获来捕获全局变量 x 和 y。lambda 函数 sum 返回它们的和。我们在主函数中首先打印 x 和 y 的初始值的和然后改变这些变量的值并再次调用 lambda 函数。可以看到lambda 函数访问的是原始变量的引用所以改变这些变量的值会影响 lambda 函数的执行结果
4、按引用访问函数变量
#include iostream
using namespace std;void print(int x, int y) {auto product []() {return x * y;};cout Product: product()endl;}int main() {int x 1;int y 2;print(x, y);x 2;y 3;print(x, y);return 0;
}
在这个示例中我们定义了一个函数 print它接受两个参数 x 和 y 的引用然后定义了一个 lambda 表达式 product用于计算这两个参数的乘积。可以看到我们在 lambda 表达式中使用了按引用捕获来捕获函数参数的引用。