Heim > Backend-Entwicklung > C++ > Können C 0x Lambda Captures geändert werden, ohne konstant zu sein?

Können C 0x Lambda Captures geändert werden, ohne konstant zu sein?

DDD
Freigeben: 2024-10-30 13:28:01
Original
880 Leute haben es durchsucht

Can C  0x Lambda Captures Be Modified Without Being Const?

Können C 0x-Lambda-Erfassungen geändert werden, ohne konstant zu sein?

Lambda-Erfassungen in C 0x erfassen normalerweise Variablen durch Referenz, die von Natur aus konstant sind . Bestimmte Szenarien erfordern jedoch die Änderung erfasster Variablen, was die Frage aufwirft: „Können erfasste Werte nicht-konstant gemacht werden?“

Betrachten Sie einen Bibliotheksfunktor, foo, mit einer nicht-konstanten Methode, „operator()“, das muss innerhalb eines Lambda aufgerufen werden. Das folgende Codefragment versucht dies, kann jedoch nicht kompiliert werden:

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

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

Der Kompilierungsfehler tritt auf, weil der Operator() des Lambda implizit als const markiert ist, da die erfassten Werte konstant sind. Um dieses Problem zu lösen, stellt C 0x das Schlüsselwort mutable bereit.

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

Durch das Hinzufügen von mutable ist der Operator() des Lambda nicht mehr konstant, sodass die erfassten Variablen innerhalb des Lambda geändert werden können. Dies ermöglicht die Änderung von Bibliotheksfunktoren oder anderen nicht konstanten erfassten Werten nach Bedarf innerhalb von Lambdas.

Das obige ist der detaillierte Inhalt vonKönnen C 0x Lambda Captures geändert werden, ohne konstant zu sein?. 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