Si consideri il seguente, ad esempio minimo:Acquisizione lambda: per utilizzare l'inizializzatore o non usarlo?
int main() {
int x = 10;
auto f1 = [x](){ };
auto f2 = [x = x](){};
}
che ho visto più di una volta un tale uso del inizializzatore [x = x]
, ma non riesco a comprendere appieno e perché dovrei usarlo al posto del [x]
.
posso ottenere il significato di qualcosa come [&x = x]
o [x = x + 1]
(come mostrato nella documentation e perché diverso dal [x]
, naturalmente, ma ancora non riesco a capire le differenze tra le lambda nell'esempio.
sono completamente intercambiabili o c'è alcuna differenza non riesco a vedere
importa se l'originale ' x' è 'const'. –
Lo cattura per copia in entrambi i casi? – skypjack
@skypjack: Nel caso '[x = ...]', 'x' può essere copiato o spostato-inizializzato - dipende dall'espressione del lato destro. Per '[x = x]' in particolare, vale a dire copia-inizializzazione, sì. – ildjarn