I lambda di C++ sarebbero convenienti da usare in modelli che necessitano di oggetti funzione ma, ahimè, non possono essere costruiti in modo predefinito.Esiste un motivo per cui lambda con una lista di acquisizione vuota non può essere costruita in modo predefinito?
Come discusso in questa domanda, questo ha senso per lambda che hanno una lista di cattura non vuota.
Instantiating C++ lambda by its type
Kerrek spiega:
Il codice non ha senso. Immaginate di avere una lambda cattura come questo:
{ int n = 0; auto t = [&n](int a) -> int { return n += a; }; }
Che cosa potrebbe significare per difetto-costruire un oggetto di tipo decltype (t)?
E i lambda con una lista di cattura vuota? C'è una ragione per cui anche quelli non hanno senso per il costrutto predefinito? C'è qualcosa di più rispetto a "lo standard dice così"?
Come predefinire costruire un tipo non specificato? E perché vorresti farlo quando puoi assegnare un lambda a 'std :: function'? – 101010
@ 101010 Il tipo è 'decltype (t)' nell'esempio. Un lambda è preferibile a 'std :: function' perché' std :: function' introduce in questo caso l'indirezione non necessaria (non c'è dubbio su quale funzione vogliamo e non cambieremo idea più avanti), più la definizione lambda può essere posizionato esattamente dove è usato – Praxeolitic