中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

深入理解C++ lambda捕獲機制

c++
小樊
88
2024-07-05 18:58:23
欄目: 編程語言

在C++中,lambda表達式是一種匿名函數,可以在函數內部定義并使用,而不需要單獨聲明函數。lambda表達式可以捕獲外部作用域的變量,以便在lambda函數體內使用。

在lambda表達式中,可以使用以下方式來捕獲外部變量:

  1. 按值捕獲:通過值傳遞方式捕獲外部變量,lambda函數內部可以修改外部變量的副本,但不會影響外部變量本身。
  2. 按引用捕獲:通過引用傳遞方式捕獲外部變量,lambda函數內部可以修改外部變量的值,會直接影響外部變量本身。
  3. 按引用捕獲(mutable):通過引用傳遞方式捕獲外部變量,但在lambda函數內部可以修改外部變量的值,不會影響外部變量本身。

示例代碼:

#include <iostream>

int main() {
    int x = 10;
    int y = 20;

    // 按值捕獲
    auto lambda1 = [x, y]() {
        std::cout << "x: " << x << ", y: " << y << std::endl;
    };

    // 按引用捕獲
    auto lambda2 = [&x, &y]() {
        x = 100;
        y = 200;
        std::cout << "x: " << x << ", y: " << y << std::endl;
    };

    // 按引用捕獲(mutable)
    auto lambda3 = [&x, &y]() mutable {
        x = 100;
        y = 200;
        std::cout << "x: " << x << ", y: " << y << std::endl;
    };

    lambda1();
    lambda2();
    lambda3();

    std::cout << "x: " << x << ", y: " << y << std::endl;

    return 0;
}

在上面的示例代碼中,我們定義了三個lambda表達式,分別按值捕獲、按引用捕獲和按引用捕獲(mutable)外部變量x和y。通過調用這些lambda表達式,我們可以看到它們對外部變量的影響不同。lambda1只讀取外部變量的值,不會影響外部變量本身;lambda2和lambda3修改了外部變量的值,會影響外部變量本身。

0
左贡县| 墨玉县| 丹东市| 梧州市| 达孜县| 古丈县| 彭阳县| 久治县| 奉化市| 彭水| 陈巴尔虎旗| 商洛市| 浦东新区| 南部县| 北票市| 阿城市| 上杭县| 澄迈县| 津南区| 黄骅市| 灵丘县| 大同市| 民丰县| 丹凤县| 浏阳市| 成武县| 伊金霍洛旗| 新绛县| 同心县| 怀化市| 阿拉善盟| 辉南县| 右玉县| 宜君县| 徐闻县| 大同市| 梧州市| 黄大仙区| 永州市| 大埔区| 稷山县|