Heim > Backend-Entwicklung > C++ > Wie kann ich erfasste Werte in C 0x Lambdas bei der Erfassung nach Wert ändern?

Wie kann ich erfasste Werte in C 0x Lambdas bei der Erfassung nach Wert ändern?

DDD
Freigeben: 2024-11-04 13:44:02
Original
792 Leute haben es durchsucht

How Can I Modify Captured Values in C  0x Lambdas When Capturing by Value?

Lambda-Erfassung nach Wert: Sicherstellen nicht konstanter erfasster Werte in C 0x

Bei der Erfassung nach Wert in C 0x-Lambda-Ausdrücken werden die erfassten Die Werte werden automatisch konstant gehalten. Dies kann ein Problem sein, wenn Sie die erfassten Werte innerhalb des Lambda ändern müssen.

Betrachten Sie beispielsweise das folgende Lambda, das eine Struktur foo nach Wert erfasst:

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

int main(int argc, char* argv[]) {
  foo afoo;

  auto bar = [=] () -> bool {
    afoo(true);
  };

  return 0;
}</code>
Nach dem Login kopieren

Dieser Code wird nicht kompiliert, da die Methode „operator()“ von „foo“ als „const“ deklariert ist. Um das Problem zu beheben, können Sie die Methode „operator()“ nicht konstant machen:

<code class="cpp">struct foo {
  bool operator() (bool &a) {
    return a;
  }
};</code>
Nach dem Login kopieren

Dies ist jedoch nicht immer eine wünschenswerte Lösung. In einigen Fällen möchten Sie möglicherweise einen Wert für den Wert erfassen, aber dennoch sicherstellen, dass er nicht innerhalb des Lambda geändert wird.

Um dies zu erreichen, können Sie das Schlüsselwort mutable verwenden. Durch die Deklaration des Lambda als [=] () veränderbar -> bool, Sie erlauben dem Lambda, die erfassten Werte zu ändern.

Beispiel:

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

In diesem Beispiel kann das Lambda jetzt sogar das erfasste Afoo-Objekt ändern obwohl es durch den Wert erfasst wird.

Das obige ist der detaillierte Inhalt vonWie kann ich erfasste Werte in C 0x Lambdas bei der Erfassung nach Wert ändern?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage