lambda 函式與表示式
lambda函式的語法定義如下:
[其中:capture
](parameters
)mutable
->
return_type
在 lambda 函式的定義式中,引數列表和返回型別都是可選部分,而捕捉列表和函式體都可能為空,c++ 中最簡單的 lambda 函式只需要宣告為:
{};例1:
定義乙個可以輸出字串的lambda表示式,表示式一般都是從方括號開始,然後結束於花括號{},花括號裡面就像定義函式那樣,包含了lamdba表示式體:
// 定義簡單的lambda表示式如果需要引數,那麼就要像函式那樣,放在圓括號裡面,如果有返回值,返回型別要放在->後面,即拖尾返回型別,當然你也可以忽略返回型別,lambda會幫你自動推斷出返回型別:auto
basiclambda =
;// 呼叫
basiclambda
();// 輸出:hello, world!
// 指明返回型別auto
add =(
inta
,intb)
->
int;
// 自動推斷返回型別
auto
multiply =(
inta
,intb)
;int
sum
=add(2
,5);// 輸出:7
intproduct
=multiply(2
,5);// 輸出:10
例如:lambda函式很簡潔,但變化較多。
1、什麼也不捕獲,或者是故意不用 lambda 函式外部的變數
#include正確的如下:using
namespace
std;
intmain();
func
();}
// 結果報錯,因為未指定預設捕獲模式
#include2、引用捕獲using
namespace
std;
intmain();
func
();}
#include3、複製並引用捕獲using
namespace
std;
intmain();
fun1
();}
#include4、指定引用或複製using
namespace
std;
intmain();
fun1
();}
#include5、捕獲this指標using
namespace
std;
intmain();
fun1
();}
#includeusing
namespace
std;
class
test
;void
lambda();
fun();}};
intmain
()
:預設不捕獲任何變數;
[=]:預設以值捕獲所有變數;
[&]:預設以引用捕獲所有變數;
[x]:僅以值捕獲x,其它變數不捕獲;
[&x]:僅以引用捕獲x,其它變數不捕獲;
[=, &x]:預設以值捕獲所有變數,但是x是例外,通過引用捕獲;
[&, x]:預設以引用捕獲所有變數,但是x是例外,通過值捕獲;
[this]:通過引用捕獲當前物件(其實是複製指標);
[*this]:通過傳值方式捕獲當前物件;
lambda表示式無法修改通過複製形式捕捉的變數,因為函式呼叫運算子的過載方法是const屬性的。有時候,你想改動傳值方式捕獲的值,那麼就要使用mutable,例子如下:
intmain();
// 複製捕捉x
cout
<<
add_x(10
)<<
endl
;// 輸出 30
return0;
}
hive 學習內容
1 hive的正則匹配搜尋表 show tables like sub name show tables like s 以s開頭的所有的 2檢視表結構 desc table name desc formatted table name 3檢視分割槽資訊 show partition table na...
學習內容分享
一 求 兩個數 30.30 和 40 的最大值?public class ex0031 system.out.println 最大值是 max 二 判斷公元1988年是否為閏年?可被4整除 但不可被100整除 為閏年,但是正百的年數必須是可以被400整除的才是閏年 public class ex00...
2016 12 06學習內容
節點查詢 父節點 parentnode 兄弟節點 下乙個兄弟 nextsibling ie6 78 識別 nextelementsibling 其他瀏覽器識別 相容處理 one.nextelementsibling one.nextsibling preivoussibling previousel...