私は C# を学んでいて、ラムダを理解しようとしています。以下のサンプルでは、10 を 10 回出力します。
class Program
{
delegate void Action();
static void Main(string[] args)
{
List<Action> actions = new List<Action>();
for (int i = 0; i < 10; ++i )
actions.Add(()=>Console.WriteLine(i));
foreach (Action a in actions)
a();
}
}
明らかに、ラムダの背後にある生成されたクラスは、int i
変数への参照またはポインターを格納しており、ループが繰り返されるたびに同じ参照に新しい値を割り当てています。C++0x 構文のように、代わりにラムダにコピーを取得させる方法はありますか
[&](){ ... } // Capture by reference
対。
[=](){ ... } // Capture copies