亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

C++11 lambda捕獲列表詳解

c++
小樊
85
2024-07-05 19:00:25
欄目: 編程語言

在C++11中,lambda表達式可以使用捕獲列表來捕獲外部變量。捕獲列表允許lambda函數訪問外部作用域的變量,包括傳值捕獲和引用捕獲兩種方式。

捕獲列表的語法如下:

[capture_list] (parameter_list) -> return_type {
    // function body
}

捕獲列表可以使用以下兩種方式進行捕獲:

  1. 傳值捕獲(by value capture): 傳值捕獲會復制捕獲的變量的副本,lambda函數內部使用的是變量的副本,而不是外部變量本身。傳值捕獲可以通過在捕獲列表中使用變量名來實現。
int x = 10;
auto lambda = [x] () {
    cout << x << endl;
};
  1. 引用捕獲(by reference capture): 引用捕獲會捕獲外部作用域的變量的引用,lambda函數內部使用的是外部變量本身,而不是副本。引用捕獲可以通過在捕獲列表中使用變量名前加上&符號來實現。
int x = 10;
auto lambda = [&x] () {
    x++;
    cout << x << endl;
};

捕獲列表還支持混合捕獲,即同時使用傳值捕獲和引用捕獲。例如:

int x = 10, y = 20;
auto lambda = [x, &y] () {
    x++;
    y++;
    cout << x << " " << y << endl;
};

在這個例子中,x被傳值捕獲,y被引用捕獲。lambda函數內部對x的修改不會影響外部變量x的值,而對y的修改則會影響外部變量y的值。

需要注意的是,lambda表達式默認情況下是無法修改被傳值捕獲的外部變量的,如果需要修改傳值捕獲的變量,可以使用mutable關鍵字來修飾lambda函數。

int x = 10;
auto lambda = [x] () mutable {
    x++;
    cout << x << endl;
};

總的來說,lambda捕獲列表是一個非常強大的特性,可以方便地在lambda函數內部訪問外部作用域的變量,并且可以靈活地選擇傳值捕獲或引用捕獲來實現功能。

0
宜都市| 宁城县| 晴隆县| 霞浦县| 扎囊县| 嘉黎县| 云浮市| 盘山县| 明光市| 通河县| 盐池县| 筠连县| 宣城市| 德江县| 庄河市| 宁强县| 黄山市| 许昌市| 玛沁县| 宁武县| 武威市| 浮山县| 武川县| 姜堰市| 德清县| 莲花县| 浦江县| 大余县| 崇义县| 扶沟县| 东山县| 绥滨县| 额济纳旗| 江阴市| 临邑县| 阳朔县| 樟树市| 饶河县| 宁南县| 新干县| 德令哈市|