Maison  >  Article  >  développement back-end  >  Pointeurs de fonctions C++ et expressions lambda : découvrir la magie des rappels

Pointeurs de fonctions C++ et expressions lambda : découvrir la magie des rappels

王林
王林original
2024-04-29 13:42:01373parcourir

Les pointeurs de fonction et les expressions lambda permettent de transmettre des fonctions comme arguments aux fonctions de rappel. Les pointeurs de fonction contiennent des variables pointant vers l'adresse d'une fonction, tandis que les expressions lambda sont des objets de fonction anonymes qui définissent des fonctions à la volée. À travers des exemples pratiques, nous démontrons l'utilisation de pointeurs de fonction et d'expressions lambda pour additionner les éléments d'un tableau. Ces techniques sont essentielles pour écrire du code C++ flexible et évolutif.

C++ 函数指针与 lambda 表达式:揭晓回调魔法

Pointeurs de fonction C++ et expressions Lambda : découvrir la magie du rappel

Introduction
Les pointeurs de fonction et les expressions lambda jouent un rôle essentiel en C++, ils permettent de transmettre des fonctions en tant que paramètres aux fonctions de rappel. Dans cet article, nous examinerons en profondeur les pointeurs de fonction et les expressions lambda et démontrerons leur utilisation pratique à travers des exemples pratiques.

Pointeur de fonction
Un pointeur de fonction est une variable qui contient l'adresse d'une fonction. Ils permettent de transmettre des fonctions sous forme de valeur, tout comme les autres variables. Pour déclarer un pointeur de fonction, suivez le format :

// 指向具有指定签名的函数的指针
typedef int (*fptr)(int);

expression lambda
l'expression lambda est un objet fonction anonyme qui permet de définir une fonction à la volée partout où une fonction est requise. Leur syntaxe est la suivante :

[capture-list](parameter-list) -> return-type { body };

Cas pratique

Ce qui suit est un cas pratique démontrant comment utiliser des pointeurs de fonction et des expressions lambda pour additionner des éléments dans un tableau :

Extrait de code 1 : Utilisation de pointeurs de fonction

#include <iostream>

// 求和函数
int sum(int a, int b) { return a + b; }

// 使用函数指针
using namespace std;

int main() {
  int arr[] = {1, 2, 3, 4, 5};
  int size = sizeof(arr) / sizeof(arr[0]);

  // 指向求和函数的函数指针
  int (*ptr)(int, int) = &sum;

  int total = 0;
  for (int i = 0; i < size; i++) {
    total += ptr(arr[i], arr[i + 1]);
  }

  cout << "Total: " << total << endl;
  return 0;
}

Extrait de code 2 : Utiliser des expressions lambda

#include <iostream>

// 使用 lambda 表达式
using namespace std;

int main() {
  int arr[] = {1, 2, 3, 4, 5};
  int size = sizeof(arr) / sizeof(arr[0]);

  int total = 0;
  for (int i = 0; i < size; i++) {
    total += [](int a, int b) -> int { return a + b; }(arr[i], arr[i + 1]);
  }

  cout << "Total: " << total << endl;
  return 0;
}

Comprendre le code
Dans l'extrait de code 1, nous utilisons un pointeur de fonctionptr 来保存指向求和函数 sum 的地址。我们遍历数组,将每个元素及其后续元素传递给 ptr。求和函数返回两个元素的总和,将其添加到 total.

Dans l'extrait 2, nous définissons une fonction de sommation anonyme à l'aide d'une expression lambda. Contrairement aux pointeurs de fonction, les expressions lambda définissent des fonctions à la volée lorsque cela est nécessaire. Nous parcourons le tableau de la même manière que l'extrait 1, en passant les éléments à une expression lambda pour les additionner.

Conclusion
Les pointeurs de fonction et les expressions lambda sont cruciaux pour transmettre des fonctions aux fonctions de rappel. Les pointeurs de fonction fournissent un mécanisme pour transmettre des fonctions via des variables simples, tandis que les expressions lambda permettent de définir dynamiquement des fonctions anonymes. En comprenant ces techniques, vous pouvez écrire du code C++ flexible et évolutif.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn