Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert man einen Abschluss im C++-Lambda-Ausdruck?

Wie implementiert man einen Abschluss im C++-Lambda-Ausdruck?

WBOY
WBOYOriginal
2024-06-01 17:50:03332Durchsuche

C++-Lambda-Ausdrücke unterstützen Abschlüsse, die Funktionsbereichsvariablen speichern und sie für Funktionen zugänglich machen. Die Syntax ist [capture-list] (parameters) -> return-type { function-body }. Capture-Liste definiert die zu erfassenden Variablen. Sie können [=] verwenden, um alle lokalen Variablen nach Wert zu erfassen, [&], um alle lokalen Variablen nach Referenz zu erfassen, oder [Variable1, Variable2, ...], um bestimmte Variablen zu erfassen. Lambda-Ausdrücke können nur auf erfasste Variablen zugreifen, den ursprünglichen Wert jedoch nicht ändern.

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

Abschlüsse in C++-Lambda-Ausdrücken

Ein Abschluss ist eine Reihe verwandter Variablen, die außerhalb des Funktionsbereichs gespeichert werden und auf die die Funktion zugreifen kann. In C++ werden Abschlüsse durch Lambda-Ausdrücke implementiert, um Variablen im Ausführungskontext einer Funktion zu erfassen.

Syntax

Die allgemeine Syntax des C++-Lambda-Ausdrucks lautet wie folgt:

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

wobei capture-list die zu erfassenden Variablen definiert, die auf folgende Weise verwendet werden können: 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
  • [=]: Alle lokalen Variablen nach Wert erfassen
  • [&]: Alle lokalen Variablen nach Referenz erfassen
  • [Variable1, Variable2, .. .]: Erfassen Sie eine bestimmte Variable nach Wert oder Referenz 🎜🎜🎜🎜 Praktisches Beispiel 🎜🎜🎜 Betrachten wir einen Lambda-Ausdruck, der auf seine äußere Funktionsbereichsvariable zugreifen muss. Der folgende Codeausschnitt demonstriert diese Funktionalität: 🎜rrreee🎜 In diesem Beispiel erfasst der Lambda-Ausdruck die Variable value nach Wert und kann innerhalb ihres Funktionskörpers aufgerufen werden. 🎜🎜🎜Hinweis🎜🎜
    • Auf erfasste Variablen muss zugegriffen werden können, wenn der Lambda-Ausdruck erstellt wird. 🎜
    • Lambda-Ausdrücke können nur auf erfasste Variablen zugreifen und ihre ursprünglichen Werte nicht ändern. 🎜
    • C++14 und höher unterstützen die Erfassung dynamischen Speichers in Lambda-Ausdrücken. 🎜
    • Verwenden Sie den Modifikator mutable, um den Wert einer erfassten Variablen in einem Lambda-Ausdruck zu ändern. 🎜🎜
  • Das obige ist der detaillierte Inhalt vonWie implementiert man einen Abschluss im C++-Lambda-Ausdruck?. 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