Rozważmy następujący przykład: minimalny,Przechwytywanie Lambda: używać inicjatora lub nie używać?
int main() {
int x = 10;
auto f1 = [x](){ };
auto f2 = [x = x](){};
}
widziałem więcej niż jeden raz takiego wykorzystania inicjatora [x = x]
, ale nie może w pełni zrozumieć i dlaczego warto go używać zamiast [x]
.
mogę sens coś jak [&x = x]
lub [x = x + 1]
(jak pokazano w documentation i dlaczego różnią się one od [x]
, oczywiście, ale nadal nie mogę dowiedzieć się różnice między lambdas w przykładzie.
są one w pełni wymienialne, czy jest jakaś różnica nie widzę
to ma znaczenie, jeśli oryginalny ' x' to 'const'. –
Czy przechwytuje go przez kopiowanie w obu przypadkach? – skypjack
@skypjack: W przypadku '[x = ...]', 'x' może być skopiowane lub zainicjalizowane - zależy od wyrażenia po prawej stronie. Dla '[x = x]' konkretnie, to jest inicjalizacja kopii, tak. – ildjarn