2026年7月6日 星期一

Lambda Expression in C++, [=] (int x) mutable throw() -> int

 

支援條件:

=>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)定義傳入參數列表,基本的用法跟一般函數的傳入參數列表一樣,不過多了一些限制條件:

 不可指定參數的預設值。

 不可使用可變長度的參數列表。

 參數列表不可以包含沒有命名的參數。





參考網址:

C++11 Lambda Expression

沒有留言:

張貼留言