48 votes

Les expressions bizarres C ++ sont bien compilées

Pourquoi les expressions C ++ valides suivantes? Ce ne sont pas des lambdas

 []{}();
{}[]{};
 

Quelqu'un peut-il m'expliquer?

78voto

Andrew Points 627

Le premier est un lambda sans liste de paramètres et un appel ultérieur. []{} est équivalent à [](){} , donc l'ensemble de la ligne est équivalente à

[](){}();

Le second est une paire d'accolades, ce qui introduit un, puis fermer immédiatement une portée, suivie par une partie inutilisée lambda définition avec aucun paramètre de la liste:

{
  // empty scope
}
[]{}; // lambda

Vous pouvez vous référer à http://en.cppreference.com/w/cpp/language/lambda pour les variations de lambda définition de la syntaxe.

41voto

Jarod42 Points 15729
  • Celui-ci est un appel lambda

     []{}();
     

    c'est équivalent à

     [](){}();
     
  • La seconde est une portée vide, suivie d'un lambda (non utilisé).

Les parenthèses sont facultatives pour lambda sans paramètre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X