C++ Lambda 表達式支援閉包,即保存函數作用域變數並供函數存取。語法為 [capture-list] (parameters) -> return-type { function-body }。 capture-list 定義要擷取的變量,可使用 [=] 按值擷取所有局部變量, [&] 按引用擷取所有局部變量,或 [variable1, variable2, ...] 擷取特定變數。 Lambda 表達式只能存取捕獲的變量,但無法修改原始值。
C++ Lambda 表達式中的閉包
閉包是一組相關的變量,儲存在函數作用域之外,同時函數又可以存取這些變數。在 C++ 中,透過 Lambda 表達式實作閉包,可以擷取函數執行上下文中的變數。
語法
C++ Lambda 表達式的一般語法如下:
[capture-list] (parameters) -> return-type { function-body }
其中capture-list
定義要捕獲的變量,可以採用以下方式:
[=]
: 捕獲所有局部變數按值[&]
: 捕獲所有局部變數依引用[variable1, variable2, ...]
: 按值或引用擷取特定變數實戰案例
讓我們考慮一個需要存取其外部函數作用域變數的Lambda 表達式。以下程式碼片段示範了此功能:
#include <iostream> int main() { int value = 10; auto lambda = [value] () { std::cout << value << std::endl; }; lambda(); // 输出 10 return 0; }
在這個範例中,Lambda 表達式捕獲 value
變數按值,並且可以在其函數體內存取。
注意
mutable
修飾符可以在 Lambda 表達式內部修改捕獲的變數按值。 以上是C++ Lambda 表達式如何實作閉包?的詳細內容。更多資訊請關注PHP中文網其他相關文章!