C++ 関数パラメータの詳細な説明: ラムダ式で渡すパラメータのルール

WBOY
リリース: 2024-04-26 15:54:01
オリジナル
505 人が閲覧しました

ラムダ式でのパラメーター受け渡しルール: 値による: 値によって渡され、元の値の変更は外部スコープには影響しません。参照渡し: [&] または [=] キャプチャ リストを使用してパラメータを参照渡しし、外側のスコープを変更できるようにします。 By Move: 可動タイプの場合、&& キャプチャ リストを使用して移動によってパラメータを渡し、パフォーマンスを最適化します。

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

#C 関数パラメータの詳細な説明: ラムダ式でパラメータを渡すためのルール

ラムダ式Lambda 式は、簡潔で強力な匿名関数ポインター構文です。 C では、ラムダ式の基本的な形式は次のとおりです。

[capture_list](parameters) -> return_type { body }
ログイン後にコピー

パラメータ受け渡しのルールラムダ式にパラメータが含まれる場合、パラメータの受け渡しは次のルールに従います:

  • 値による: デフォルトでは、パラメーターは値によって渡されます。つまり、元の値への変更は外側のスコープには反映されません。
  • 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
ログイン後にコピー

結論ラムダ式のパラメータ受け渡しルールを理解することは、ラムダ式を効果的に使用するために重要です。パラメーターを正しく渡すことで、必要に応じて内部変数を変更したり、パフォーマンスを最適化したりできます。

以上がC++ 関数パラメータの詳細な説明: ラムダ式で渡すパラメータのルールの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート