Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penunjuk fungsi C++ dan ungkapan lambda: Mendedahkan keajaiban panggilan balik

Penunjuk fungsi C++ dan ungkapan lambda: Mendedahkan keajaiban panggilan balik

王林
王林asal
2024-04-29 13:42:01339semak imbas

Kedua-dua penunjuk fungsi dan ungkapan lambda membenarkan fungsi dihantar sebagai argumen kepada fungsi panggil balik. Penunjuk fungsi memegang pembolehubah yang menunjuk ke alamat fungsi, manakala ungkapan lambda ialah objek fungsi tanpa nama yang mentakrifkan fungsi dengan cepat. Melalui contoh praktikal, kami menunjukkan penggunaan penunjuk fungsi dan ungkapan lambda untuk menjumlahkan elemen tatasusunan. Teknik ini penting untuk menulis kod C++ yang fleksibel dan berskala.

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

Penunjuk Fungsi C++ dan Ungkapan Lambda: Mendedahkan Sihir Panggilan Balik

Pengenalan
Penunjuk fungsi dan ungkapan lambda memainkan peranan penting dalam C++, ia membenarkan fungsi menghantar balik. Dalam artikel ini, kami akan melihat secara mendalam pada penunjuk fungsi dan ungkapan lambda dan menunjukkan penggunaan praktikalnya melalui contoh praktikal.

Penunjuk fungsi
Penunjuk fungsi ialah pembolehubah yang memegang alamat fungsi. Mereka membenarkan fungsi diluluskan sebagai nilai, sama seperti pembolehubah lain. Untuk mengisytiharkan penuding fungsi, ikut format:

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

ekspresi lambda
ekspresi lambda ialah objek fungsi tanpa nama yang membolehkan untuk mentakrifkan fungsi dengan pantas di mana sahaja fungsi diperlukan. Sintaksnya adalah seperti berikut:

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

Kes praktikal

Berikut ialah kes praktikal yang menunjukkan cara menggunakan penunjuk fungsi dan ungkapan lambda untuk menjumlahkan elemen dalam tatasusunan:

Coretan kod 1: Menggunakan penunjuk fungsi

Coretan kod 2: Menggunakan ungkapan lambda

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

Memahami kodDalam coretan kod 1, kami menggunakan penuding fungsi
. ptr 来保存指向求和函数 sum 的地址。我们遍历数组,将每个元素及其后续元素传递给 ptr。求和函数返回两个元素的总和,将其添加到 total

Dalam coretan 2, kami mentakrifkan fungsi penjumlahan tanpa nama menggunakan ungkapan lambda. Tidak seperti penunjuk fungsi, ungkapan lambda mentakrifkan fungsi dengan cepat apabila diperlukan. Kami mengulangi tatasusunan dengan cara yang sama seperti coretan 1, menghantar elemen kepada ungkapan lambda untuk dijumlahkan.

KesimpulanPenunjuk fungsi dan ungkapan lambda adalah penting untuk menghantar fungsi kepada fungsi panggil balik. Penunjuk fungsi menyediakan mekanisme untuk menghantar fungsi melalui pembolehubah mudah, manakala ungkapan lambda membenarkan fungsi tanpa nama ditakrifkan secara dinamik. Dengan memahami teknik ini, anda boleh menulis kod C++ yang fleksibel dan berskala.

Atas ialah kandungan terperinci Penunjuk fungsi C++ dan ungkapan lambda: Mendedahkan keajaiban panggilan balik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn