Heim >Backend-Entwicklung >C++ >Wie erfasst man externe Variablen in Lambda-Ausdrücken korrekt?

Wie erfasst man externe Variablen in Lambda-Ausdrücken korrekt?

DDD
DDDOriginal
2024-10-23 18:18:02644Durchsuche

How to Correctly Capture External Variables in Lambda Expressions?

Fehler: Erfassen externer Variablen in Lambda-Ausdrücken

Bei der Verwendung von Lambda-Ausdrücken ist es wichtig anzugeben, wie externe Variablen erfasst werden sollen. Im bereitgestellten Code erfordert der Lambda-Ausdruck im std::remove_if-Algorithmus Zugriff auf die externe Variable flagId. Der gemeldete Fehler weist jedoch darauf hin, dass der Aufnahmemodus fehlt.

Lösung:

Um dieses Problem zu beheben, muss der Aufnahmemodus explizit in eckigen Klammern angegeben werden ([ ]). Dadurch kann der Lambda-Ausdruck innerhalb seines Gültigkeitsbereichs auf externe Variablen zugreifen. Es gibt drei Haupterfassungsmodi:

  • [&flagId]: Erfasst flagId als Referenz. Dies bedeutet, dass sich alle an der FlagId innerhalb des Lambda vorgenommenen Änderungen auf die ursprüngliche FlagId-Variable auswirken.
  • [flagId]: Erfasst flagId nach Wert. Dadurch wird eine lokale Kopie der FlagId erstellt, die nicht innerhalb des Lambda geändert werden kann.
  • [=]: Erfasst alle externen Variablen nach Wert. Dadurch werden lokale Kopien aller externen Variablen erstellt.

Für den bereitgestellten Code ist der geeignete Erfassungsmodus „per Referenz“, da er auf den aktualisierten Wert von flagId zugreifen muss. Daher lautet der korrigierte Lambda-Ausdruck:

<code class="cpp">[&flagId](Flag&amp; device) {
    return device.getId() == flagId;
}</code>

Durch Angabe des Erfassungsmodus kann der Lambda-Ausdruck korrekt auf die externe Variable flagId zugreifen und die gewünschte Operation ausführen.

Das obige ist der detaillierte Inhalt vonWie erfasst man externe Variablen in Lambda-Ausdrücken korrekt?. 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