J'ai appris C#, et j'essaie de comprendre les lambdas. Dans cet exemple ci-dessous, cela affiche 10 dix fois.
class Program
{
delegate void Action();
static void Main(string[] args)
{
List actions = new List();
for (int i = 0; i < 10; ++i )
actions.Add(()=>Console.WriteLine(i));
foreach (Action a in actions)
a();
}
}
Évidemment, la classe générée derrière la lambda stocke une référence ou pointeur à la variable int i
, et assigne une nouvelle valeur à la même référence à chaque itération de la boucle. Y a-t-il un moyen de forcer la lambda à capturer une copie plutôt, comme la syntaxe C++0x
[&](){ ... } // Capture par référence
vs.
[=](){ ... } // Capture les copies