Qt:Lambda表達式

C++ 11中也添加了lambda表達式,在Qt中使用該表達式也較爲頻繁,今天在qt中使用該表達式時遇到了一些問題,在此做一下記錄。

Qt中的Lambda表達式是比較常用的一種方式,其結構如下:

[capture] (parameters) mutable ->return-type{statement}

[capture]:捕捉列表。捕捉列表總是出現在Lambda函數的開始處。實際上,[]是Lambda引出符。編譯器根據該引出符判斷接下來的代碼是否是Lambda函數。捕捉列表能夠捕捉上下文中的變量以供Lambda函數使用; [=]是經常使用的一種表達方式,其意思爲將外部變量全部傳入Lambda函數中。

(parameters):參數列表。與普通函數的參數列表一致。如果不需要參數傳遞,則可以連同括號“()”一起省略; 其通常與捕捉列表配合使用,爲“=”。

mutable:mutable修飾符。在默認情況下,Lambda函數總是一個const函數,mutable可以取消其常量性。在使用該修飾符時,參數列表不可省略(即使參數爲空);若不加mutable,則默認爲const函數,可能會造成函數中諸如 “對象包含阻止匹配的類型限定符”這類錯誤。

->return-type:返回類型。用追蹤返回類型形式聲明函數的返回類型。我們可以在不需要返回值的時候也可以連同符號”->”一起省略。此外,在返回類型明確的情況下,也可以省略該部分,讓編譯器對返回類型進行推導。

{statement}:函數體。其實現與普通函數一樣,除了可以使用傳遞進來的參數之外,還可以使用所有捕獲的變量,若使用"[=]"則可以使用外部所有變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章