Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan penutupan dalam ungkapan C++ Lambda?

Bagaimana untuk melaksanakan penutupan dalam ungkapan C++ Lambda?

WBOY
WBOYasal
2024-06-01 17:50:03336semak imbas

C++ Lambda ungkapan menyokong penutupan, yang menyimpan pembolehubah skop fungsi dan menjadikannya boleh diakses oleh fungsi. Sintaks ialah [capture-list] (parameters) -> capture-list mentakrifkan pembolehubah untuk ditangkap, anda boleh menggunakan [=] untuk menangkap semua pembolehubah tempatan mengikut nilai, [&] untuk menangkap semua pembolehubah tempatan melalui rujukan, atau [variable1, variable2, ...] untuk menangkap pembolehubah tertentu. Ungkapan Lambda hanya boleh mengakses pembolehubah yang ditangkap tetapi tidak boleh mengubah suai nilai asal.

C++ Lambda 表达式如何实现闭包?

Penutupan dalam ungkapan C++ Lambda

Penutupan ialah satu set pembolehubah berkaitan yang disimpan di luar skop fungsi dan boleh diakses oleh fungsi tersebut. Dalam C++, penutupan dilaksanakan melalui ungkapan lambda untuk menangkap pembolehubah dalam konteks pelaksanaan fungsi.

Syntax

Sintaks umum ungkapan C++ Lambda adalah seperti berikut:

[capture-list] (parameters) -> return-type { function-body }

di mana capture-list mentakrifkan pembolehubah yang akan ditangkap, yang boleh digunakan dengan cara berikut: capture-list 定义要捕获的变量,可以采用以下方式:

  • [=]: 捕获所有局部变量按值
  • [&]: 捕获所有局部变量按引用
  • [variable1, variable2, ...]: 按值或引用捕获特定变量

实战案例

让我们考虑一个需要访问其外部函数作用域变量的 Lambda 表达式。以下代码段演示了此功能:

#include <iostream>

int main() {
  int value = 10;
  auto lambda = [value] () {
    std::cout << value << std::endl;
  };

  lambda();  // 输出 10

  return 0;
}

在这个例子中,Lambda 表达式捕获 value 变量按值,并可以在其函数体内访问。

注意

  • 捕获的变量必须在 Lambda 表达式创建时可访问。
  • Lambda 表达式只能访问捕获的变量,不能修改它们的原始值。
  • C++14 及更高版本支持 Lambda 表达式中捕获动态内存。
  • 使用 mutable
  • [=]: Tangkap semua pembolehubah tempatan mengikut nilai
  • [&]: Tangkap semua pembolehubah tempatan melalui rujukan
  • [variable1, variable2, .. .]: Tangkap pembolehubah tertentu mengikut nilai atau rujukan 🎜🎜🎜🎜 Contoh praktikal 🎜🎜🎜 Mari kita pertimbangkan ungkapan Lambda yang perlu mengakses pembolehubah skop fungsi luarnya. Coretan kod berikut menunjukkan fungsi ini: 🎜rrreee🎜 Dalam contoh ini, ungkapan Lambda menangkap pembolehubah nilai mengikut nilai dan boleh diakses dalam badan fungsinya. 🎜🎜🎜Nota🎜🎜
    • Pembolehubah yang ditangkap mesti boleh diakses apabila ungkapan Lambda dibuat. 🎜
    • Ekspresi Lambda hanya boleh mengakses pembolehubah yang ditangkap dan tidak boleh mengubah suai nilai asalnya. 🎜
    • C++14 dan ke atas menyokong menangkap memori dinamik dalam ungkapan lambda. 🎜
    • Gunakan pengubah suai boleh ubah untuk mengubah suai nilai pembolehubah yang ditangkap di dalam ungkapan Lambda. 🎜🎜
  • Atas ialah kandungan terperinci Bagaimana untuk melaksanakan penutupan dalam ungkapan C++ Lambda?. 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