C ++ Lambda-Kopie Wert in Capture-Liste

8

Ich habe ein Programm wie folgt:

%Vor%

Es gibt einen Kompilierungsfehler in Xcode: Kann keiner Variablen zugewiesen werden, die durch Kopie in einem nicht veränderbaren Lambda erfasst wurde.

Meine Frage ist: Wenn wir die Kopie verwenden (mit "=" oder Wertname), kann diesem Wert kein neuer Wert zugewiesen oder geändert werden?

    
injoy 13.09.2014, 21:13
quelle

2 Antworten

10

In einem Lambda sind erfasste Variablen standardmäßig unveränderlich. Das hängt nicht von den erfassten Variablen oder der Art und Weise ab, wie sie erfasst wurden. Der Funktionsaufrufoperator des Schließungstyps wird stattdessen als const :

deklariert
  

Dieser Funktionsaufrufoperator oder diese Operatorvorlage wird als const deklariert.   (9.3.1) wenn und nur wenn der Lambda-Ausdruck    parameter-declaration-clause wird nicht gefolgt von mutable .

Wenn Sie also die erfassten Variablen innerhalb des Körpers ändern möchten, ändern Sie einfach das Lambda in

%Vor%

, damit der const -Infikator entfernt wird.

    
Columbo 13.09.2014, 21:20
quelle
8

Das operator () eines Lambda ist implizit const , es sei denn, das Lambda wird als mutable deklariert - und Sie können die Datenelemente in einer const -Memberfunktion nicht ändern. Dies geschieht unabhängig vom Typ des Captures.

    
T.C. 13.09.2014 21:16
quelle

Tags und Links