iso c++ 11 標準的一大亮點是引入lambda表示式。基本語法如下:
[capture list] (parameter list) ->return type
其中除了「[ ]」(其中捕獲列表可以為空,可以是this)和「復合語句」(相當於具名函式定義的函式體),其它都是可選的。它的型別是唯一的具有成員operator()的非聯合的類型別,稱為閉包型別(closure type):閉包是可以包含自由(未繫結到特定物件)變數的**塊。
示例乙個觸控開始事件:
rockerrangeevent->ontouchbegan=[this](touch* touch,event* e);
c++中,乙個lambda表示式表示乙個可呼叫的**單元。我們可以將其理解為乙個未命名的內聯函式。它與普通函式不同的是,lambda必須使用尾置返回來指定返回型別,用於確定表示式是否再往下執行?
乙個更清楚詳細的示例:例如呼叫中的std::sort,iso c++ 98 的寫法是要先寫乙個compare函式
boolcompare(int&a,int&b)
然後,再這樣呼叫:
sort(a,a+n,compare);
然而,用iso c++ 11 標準新增的lambda表示式,可以這麼寫:
sort(a,a+n,(inta,intb));//降序排序
iso c++14支援基於型別推斷的泛型lambda表示式。上面的排序**可以這樣寫:
sort(a,a+n,(constauto&a,constauto&b));//降序排序:不依賴a和b的具體型別
由於lambda的型別是唯一的,不能通過型別名來顯式宣告對應的物件,但可以利用auto關鍵字和型別推導:
autof=(inta,intb);
以上,lambda表示式有助於重構**,避免書寫過於複雜的引數型別。特別地,不需要顯式指出引數型別使使用高階函式變得更加容易。
C 匿名方法和拉姆達表示式
匿名方法本質上是一傳遞給委託的 塊,是使用委託的另一種方法。規則 1 匿名方法中不能使用跳轉語句跳至次匿名方法的外部,反之亦然 匿名方法外部的跳轉語句也不能跳轉到匿名方法的內部 2 在匿名方法的內部不能訪問不安全的 另外,也不能訪問在匿名方法外部定義的ref和out引數。3 可以使用在匿名方法外部定...
C 匿名方法和拉姆達表示式
匿名方法本質上是一傳遞給委託的 塊,是使用委託的另一種方法。規則 1 匿名方法中不能使用跳轉語句跳至次匿名方法的外部,反之亦然 匿名方法外部的跳轉語句也不能跳轉到匿名方法的內部 2 在匿名方法的內部不能訪問不安全的 另外,也不能訪問在匿名方法外部定義的ref和out引數。3 可以使用在匿名方法外部定...
拉姆達表示式 資源 能量子表示式hv怎麼念?
教育部 停課不停教 不停學 既是戰疫情應急之舉,也是網際網路 教育的重要成果應用展示,任務艱鉅,使命光榮。不知不覺中,老師變主播已經兩個多月了。高二學生普遍進入選修3 5的學習。第17章 波粒二象性 有乙個蒲朗克能量子表示式 hv,公式中的那幾個字母到底怎麼念?估計是很多理科生頗為糾結的問題。今天作...