Beachten Sie Folgendes:Lambda Capture nach Wert veränderbar funktioniert nicht mit const &?
void test(const int &value)
{
auto testConstRefMutableCopy = [value]() mutable {
value = 2; // compile error: Cannot assign to a variable captured by copy in a non-mutable lambda
};
int valueCopy = value;
auto testCopyMutableCopy = [valueCopy]() mutable {
valueCopy = 2; // compiles OK
};
}
Warum ist die erste Version der Kompilierung ein Fehler auf, wenn ich die Lambda als wandelbar deklariert haben und gefangen value
nach Wert (was ich eine Kopie davon gemacht gedacht)?
Getestet mit clang (x86_64-apple-darwin14.3.0), wo die Fehlermeldung kommt, und Visual C++ (vc120).
GCC trunk, too ("Fehler: Zuweisung der schreibgeschützten Variablen 'value'") –
Die 'const'-ness der Quellvariable scheint die 'veränderliche' Eigenschaft des Lambda zu übertrumpfen. Wenn Sie es in '[value = value]' ändern, wird der Fehler in gcc behoben. –