Heim  >  Artikel  >  Backend-Entwicklung  >  C++-Funktionszeiger und Lambda-Ausdrücke: Entdecken Sie die Magie von Rückrufen

C++-Funktionszeiger und Lambda-Ausdrücke: Entdecken Sie die Magie von Rückrufen

王林
王林Original
2024-04-29 13:42:01373Durchsuche

Sowohl Funktionszeiger als auch Lambda-Ausdrücke ermöglichen die Übergabe von Funktionen als Argumente an Rückruffunktionen. Funktionszeiger enthalten Variablen, die auf die Adresse einer Funktion verweisen, während Lambda-Ausdrücke anonyme Funktionsobjekte sind, die Funktionen im laufenden Betrieb definieren. Anhand praktischer Beispiele demonstrieren wir die Verwendung von Funktionszeigern und Lambda-Ausdrücken zum Summieren von Array-Elementen. Diese Techniken sind für das Schreiben von flexiblem und skalierbarem C++-Code unerlässlich.

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

C++-Funktionszeiger und Lambda-Ausdrücke: Die Callback-Magie aufdecken

Einführung
Funktionszeiger und Lambda-Ausdrücke spielen in C++ eine wichtige Rolle, sie ermöglichen die Übergabe von Funktionen als Parameter an Callback-Funktionen. In diesem Artikel werfen wir einen detaillierten Blick auf Funktionszeiger und Lambda-Ausdrücke und demonstrieren deren praktischen Einsatz anhand praktischer Beispiele.

Funktionszeiger
Ein Funktionszeiger ist eine Variable, die die Adresse einer Funktion enthält. Sie ermöglichen die Übergabe von Funktionen als Wert, genau wie andere Variablen. Um einen Funktionszeiger zu deklarieren, folgen Sie dem Format:

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

Lambda-Ausdruck
Lambda-Ausdruck ist ein anonymes Funktionsobjekt, das es ermöglicht, eine Funktion im Handumdrehen zu definieren, wo immer eine Funktion erforderlich ist. Ihre Syntax lautet wie folgt:

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

Praktischer Fall

Das Folgende ist ein praktischer Fall, der zeigt, wie Funktionszeiger und Lambda-Ausdrücke verwendet werden, um Elemente in einem Array zu summieren:

Codeausschnitt 1: Funktionszeiger verwenden

#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;
}

Codeausschnitt 2: Lambda-Ausdrücke verwenden

#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;
}

Den Code verstehen
Im Codeausschnitt 1 verwenden wir einen Funktionszeigerptr 来保存指向求和函数 sum 的地址。我们遍历数组,将每个元素及其后续元素传递给 ptr。求和函数返回两个元素的总和,将其添加到 total.

In Snippet 2 definieren wir eine anonyme Summationsfunktion mithilfe eines Lambda-Ausdrucks. Im Gegensatz zu Funktionszeigern definieren Lambda-Ausdrücke Funktionen bei Bedarf im laufenden Betrieb. Wir iterieren über das Array auf die gleiche Weise wie in Snippet 1 und übergeben die Elemente an einen Lambda-Ausdruck, um sie zu summieren.

Fazit
Funktionszeiger und Lambda-Ausdrücke sind entscheidend für die Übergabe von Funktionen an Callback-Funktionen. Funktionszeiger bieten einen Mechanismus zum Weiterleiten von Funktionen über einfache Variablen, während Lambda-Ausdrücke die dynamische Definition anonymer Funktionen ermöglichen. Wenn Sie diese Techniken verstehen, können Sie flexiblen und skalierbaren C++-Code schreiben.

Das obige ist der detaillierte Inhalt vonC++-Funktionszeiger und Lambda-Ausdrücke: Entdecken Sie die Magie von Rückrufen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn