函数指针作为 c++++ 中将函数作为值的变量,实现了动态调用函数的功能。lambda 表达式是匿名函数,提供了一种现代简洁的函数指针替代方案。函数指针指向函数地址并通过调用符号 (&) 绑定,lambda 表达式使用 [] 语法定义,并支持捕获外部变量。两者都允许灵活地调用函数,并在排序等实战案例中发挥作用。
C++ 函数指针:函数指针与 Lambda 表达式
函数指针是 C++ 中的重要特性,它允许将函数作为一个值来使用。这使得可以动态地调用函数,从而增加了代码的灵活性。lambda 表达式是一种匿名函数,它为 C++ 函数指针提供了现代且简洁的替代方案。
函数指针
立即学习“C++免费学习笔记(深入)”;
函数指针是一个指向函数的变量。它的语法如下:
returnType (*functionPointerName)(parameterList);
登录后复制
例如,以下代码声明了一个指向一个接受两个 int 参数并返回 int 的函数的函数指针:
int (*addFunctionPointer)(int, int);
登录后复制
要使用函数指针,必须将其指向一个实际函数。这可以通过地址运算符 (&) 来完成:
addFunctionPointer = &add; // add 是一个接受两个 int 参数并返回 int 的函数
登录后复制
现在,可以使用函数指针来调用函数,就像调用普通函数一样:
int result = addFunctionPointer(10, 20);
登录后复制
Lambda 表达式
Lambda 表达式是匿名函数,不需要显式声明函数名。它们的语法如下:
[captureClause](parameterList) -> returnType { functionBody };
登录后复制
其中:
- captureClause:指定要捕获的外部变量。
- parameterList:指定函数的参数。
- returnType:指定函数的返回类型。
- functionBody:指定函数体。
例如,以下代码创建一个 lambda 表达式,接受两个 int 参数并返回它们的和:
auto addLambda = [](int a, int b) { return a + b; };
登录后复制
与函数指针类似,lambda 表达式可以存储在变量中:
auto addLambda2 = addLambda;
登录后复制
并且可以像普通函数一样被调用:
int result = addLambda2(10, 20);
登录后复制
实战案例
以下是一个使用函数指针和 lambda 表达式对数字列表进行排序的实战案例:
#include <iostream> #include <algorithm> #include <vector> using namespace std; bool compare(int a, int b) { return a > b; } int main() { vector<int> numbers = {10, 20, 5, 15, 25}; // 使用函数指针排序 sort(numbers.begin(), numbers.end(), compare); // 使用 lambda 表达式排序 sort(numbers.begin(), numbers.end(), [](int a, int b) { return a > b; }); for (int number : numbers) { cout << number << " "; } return 0; }
登录后复制
输出结果:
25 20 15 10 5
登录后复制
以上就是C++ 函数指针:函数指针与 lambda 表达式的详细内容,更多请关注php中文网其它相关文章!