Heim > Backend-Entwicklung > C++ > Können Lambda-Funktionen nicht konstante Werte in C 0x erfassen?

Können Lambda-Funktionen nicht konstante Werte in C 0x erfassen?

Mary-Kate Olsen
Freigeben: 2024-11-02 06:57:29
Original
768 Leute haben es durchsucht

Can Lambda Functions Capture Non-Const Values in C  0x?

Lambda-Erfassung und veränderbarer erfasster Wert

In C 0x bieten Lambda-Ausdrücke eine leistungsstarke Möglichkeit, lokale Variablen zu erfassen. Standardmäßig werden jedoch nach Wert erfasste Variablen als konstant behandelt. Dies kann zu Einschränkungen bei der Arbeit mit Bibliotheken führen, die eine Änderung des erfassten Werts erfordern.

Stellen Sie sich das folgende Szenario vor:

<code class="cpp">struct foo
{
  bool operator() (const bool &a)
  {
    return a;
  }
};

int main()
{
  foo afoo;

  // Attempt to capture non-const reference by value
  auto bar = [=]() -> bool { afoo(true); };
}</code>
Nach dem Login kopieren

Dieser Code kann aufgrund eines Versuchs, den erfassten Wert zu ändern, nicht kompiliert werden innerhalb der nicht konstanten Mitgliedsfunktion afoo::operator().

Lösung: Verwendung von veränderlichem Lambda

Zur Erfassung nach Wert unter Beibehaltung der Möglichkeit, die erfasste Variable zu ändern , kann man das Schlüsselwort mutable verwenden. Indem das Lambda als veränderlich deklariert wird, ermöglicht es die Änderung seines internen Zustands, einschließlich erfasster Werte.

<code class="cpp">auto bar = [=]() mutable -> bool { afoo(true); };</code>
Nach dem Login kopieren

In diesem modifizierten Beispiel darf der Operator() des Lambda das erfasste Afoo ändern und die Kompilierung auflösen Fehler. Beachten Sie, dass das Lambda ohne das Schlüsselwort mutable aufgrund seines erfassten nicht konstanten Werts als const betrachtet würde.

Das obige ist der detaillierte Inhalt vonKönnen Lambda-Funktionen nicht konstante Werte in C 0x erfassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage