[C++][Visual Studio]Visual studio 2010 C++0x new feature: lambda
Visual studio 2010為C++的開發人員新增了lambda這個C++0x的功能,為一沒有名稱的方法,也可將之稱為匿名方法。多使用於方法主題較短、方法較不常觸發或較不適合放為成員方法...等情境。
使用上類似下面這樣:
auto lambda = [](int val1, int val2)
{
return val1 + val2;
};
auto result = lambda(1,2);
這是一個很簡單的例子,設定一個lambda表示式允許接受兩個參數val1與val2,並將兩數相加後回傳。
若要指定lambda的回傳值型態,可透過在lambda後面加上"->"指定回傳的型態。
auto lambda = [](int val1, int val2) -> int
{
return val1 + val2;
};
auto result = lambda(1,2);
若是想直接使用lambda主體外的參數,可在中括號內加入"=",表示能將需要的lambda主體外的參數以傳值的方式傳入使用。
int val1 = 1;
int val2 = 2;
int result;
auto lambda = [=]() -> int
{
return val1 + val2;
};
result = lambda();
若想以傳址的方式傳入lambda主體使用,可使用"&"關鍵字,像是下面程式想在lambda主體內存取主體外的result變數,可在中括號內加入"&result",指定result變數以傳址的方式傳入lambda主體。
int result;
auto lambda = [&result](int val1, int val2)
{
result = val1 + val2;
};
lambda(1,2);
要傳址的參數過多的話,我們也可以直接在中括號內加入"&"就好。
int result;
auto lambda = [&](int val1, int val2)
{
result = val1 + val2;
};
lambda(1,2);
若有的要傳址有的要傳值的話,可將兩者混用,像是下面這樣。
int val1 = 1;
int val2 = 2;
int result;
auto lambda = [=, &result]()
{
result = val1 + val2;
};
lambda();