Pourquoi les expressions C ++ valides suivantes? Ce ne sont pas des lambda
[]{}(); {}[]{};
Quelqu’un peut-il me les expliquer?
Le premier est un lambda sans liste de parameters et un appel ultérieur. []{}
est équivalent à [](){}
donc la ligne entière est équivalente à
[](){}();
La seconde est une paire d’accolades, qui introduisent puis ferment immédiatement une scope, suivie d’une définition lambda inutilisée sans liste de parameters:
{ // empty scope } []{}; // lambda
Vous pouvez vous référer à http://fr.cppreference.com/w/cpp/language/lambda pour les variantes de la syntaxe de définition lambda.
Celui-ci est un appel lambda
[]{}();
c’est équivalent à
[](){}();
La seconde est une étendue vide, suivie d’un lambda (non utilisé).
Les parens sont facultatifs pour lambda sans paramètre.