卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章78965本站已运行4411

C++ 函数指针:函数指针与 lambda 表达式

函数指针作为 c++++ 中将函数作为值的变量,实现了动态调用函数的功能。lambda 表达式是匿名函数,提供了一种现代简洁的函数指针替代方案。函数指针指向函数地址并通过调用符号 (&) 绑定,lambda 表达式使用 [] 语法定义,并支持捕获外部变量。两者都允许灵活地调用函数,并在排序等实战案例中发挥作用。

C++ 函数指针:函数指针与 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
卓越飞翔博客
上一篇: 搜索和(法学硕士)转换
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏