支援條件:
=>GCC 4.5:需要指定 -std=c++11 參數。
=>Intel C++ Compiler 11:需要指定 /Qstd=c++0x 參數。
=>Microsoft Visual C++ 2010(包含在 Visual Studio 2010 之中)
語法如下:
[=] (int x) mutable throw() -> int {
int n = x;
return n;
}
各部件解說:
[=]:lambda-introducer,也稱為 capture clause。如何將目前 scope 範圍之變數抓至 lambda expression 中使用
(int x):lambda declarator,也稱為參數清單(parameter list)。定義此匿名函數的傳入參數列表。不需要傳入任何參數的話,可以連同小括號都一起省略。
mutable:mutable specification。可以讓 lambda expression 直接修改以傳值方式抓取進來的外部變數,若不需要此功能,則可以將其省略。
throw():例外狀況規格(exception specification)。指定該函數會丟出的例外。如果該函數沒有使用到例外的功能,則可以直接省略。
-> int:傳回值型別(return type)。如果定義的函數很單純,只包含一個傳回陳述式(statement)或是根本沒有傳回值的話,這部分就可以直接省略,讓編譯器自行判斷傳回值的型別。
重點參考:
[]:只有兩個中括號,完全不抓取外部的變數。
[=]:所有的變數都以傳值(by value)的方式抓取。
[&]:所有的變數都以傳參考(by reference)的方式抓取。
[x, &y]:x 變數使用傳值、y 變數使用傳參考。
[=, &y]:除了 y 變數使用傳參考之外,其餘的變數皆使用傳值的方式。
[&, x]:除了 x 變數使用傳值之外,其餘的變數皆使用傳參考的方式。
-----------------------------------------------------------------------------------------------
(int x)定義傳入參數列表,基本的用法跟一般函數的傳入參數列表一樣,不過多了一些限制條件:
不可指定參數的預設值。
不可使用可變長度的參數列表。
參數列表不可以包含沒有命名的參數。
參考網址:
沒有留言:
張貼留言