首頁  >  文章  >  後端開發  >  C++ 函式參數詳解:lambda表達式中參數傳遞的規則

C++ 函式參數詳解:lambda表達式中參數傳遞的規則

WBOY
WBOY原創
2024-04-26 15:54:01440瀏覽

Lambda 表達式中的參數傳遞規則:By Value:以值傳遞,對原始值的修改不影響外部作用域。 By Reference:使用 [&] 或 [=] 擷取清單按引用傳遞參數,允許修改外部作用域。 By Move:對於可移動類型,使用 && 擷取清單以移動方式傳遞參數,優化效能。

C++ 函数参数详解:lambda表达式中参数传递的规则

C 函數參數詳解:lambda 表達式中參數傳遞的規則

Lambda 表達式
Lambda 表達式是一種簡潔且強大的匿名函數指標語法。在C 中,lambda 表達式的基本格式為:

[capture_list](parameters) -> return_type { body }

參數傳遞規則
當λ 表達式包含參數時,參數傳遞遵守以下規則:

  • #By Value: 預設情況下,參數會按值傳遞,這表示對原始值的任何修改都不會反映在外部作用域中。
  • By Reference: 使用 [&][=] 擷取清單擷取參數的引用,可以按引用傳遞參數。
  • By Move: 對於可移動類型,使用 && 擷取清單擷取參數的移動引用,可以按移動方式傳遞參數。

實戰案例

#考慮以下C 程式碼範例:

#include <iostream>
#include <vector>

int main() {
    // 创建一个 lambda 表达式,按值传递一个整型参数
    auto sum = [](int x) { return x + 1; };

    // 实例化一个 lambda 表达式,按引用传递参数
    int value = 5;
    auto increment = [&value]() { value += 1; };

    // 实例化一个 lambda 表达式,按移动传递 vector
    std::vector<int> vec = {1, 2, 3};
    auto reverse = [vec = std::move(vec)]() {
        std::reverse(vec.begin(), vec.end());
    };

    std::cout << "By Value: " << sum(5) << std::endl;
    increment();
    std::cout << "By Reference: " << value << std::endl;
    reverse();
    std::cout << "By Move: ";
    for (auto elem : vec) {
        std::cout << elem << ' ';
    }
    std::cout << std::endl;

    return 0;
}

輸出:

By Value: 6
By Reference: 6
By Move: 3 2 1

結論
理解Lambda 表達式中的參數傳遞規則對於有效使用它們至關重要。透過正確傳遞參數,你可以根據需要修改內部變數或最佳化效能。

以上是C++ 函式參數詳解:lambda表達式中參數傳遞的規則的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn