LoginSignup
1
1

C++ Lambdaのキャプチャリスト

Posted at

Lambdaのキャプチャリスト

Lambda関数がアクセスできる外部変数を指定する柔軟な手段を提供

使用方法

値のキャプチャ

[x, y]:指定された外部変数 x と y を値でキャプチャします。

int main() {
    int x = 5;
    double y = 3.14;

    auto lambda = [x, y]() {
        std::cout << " x: " << x << std::endl;
        std::cout << " y: " << y << std::endl;
    };

    lambda();

    return 0;
}

参照のキャプチャ

[&x, &y]:指定された外部変数 x と y を参照でキャプチャします。

int main() {
    int x = 5;
    double y = 3.14;

    auto lambda = [&x, &y]() {
        std::cout << " x: " << x << std::endl;
        std::cout << " y: " << y << std::endl;
    };

    lambda();

    return 0;
}

混合のキャプチャ

[x, &y]:x を値でキャプチャし、y を参照でキャプチャします。

int main() {
    int x = 5;
    double y = 3.14;

    auto lambda = [x, &y]() {
        std::cout << " x: " << x << std::endl;
        std::cout << " y: " << y << std::endl;
    };

    lambda();

    return 0;
}

すべての変数をキャプチャ(値キャプチャ)

[=]:すべての外部変数を値でキャプチャします。

int main() {
    int x = 5;
    double y = 3.14;

    auto lambda = [=]() {
        std::cout << " x: " << x << std::endl;
        std::cout << " y: " << y << std::endl;
    };

    lambda();

    return 0;
}

すべての変数をキャプチャ(参照キャプチャ)

[&]:すべての外部変数を参照でキャプチャします。

int main() {
    int x = 5;
    double y = 3.14;

    auto lambda = [&]() {
        std::cout << " x: " << x << std::endl;
        std::cout << " y: " << y << std::endl;
    };

    lambda();

    return 0;
}

すべての変数をキャプチャ(特定の変数を無視)

[=, &x]:すべての外部変数を値でキャプチャしますが、変数 x だけは参照でキャプチャします。

外部変数をキャプチャ後に変更権限を追加

[x = 10, y]:x を値でキャプチャし、x のコピーを変更することが許可されます。

キャプチャリストの型推論

[&a = x, b = y]:キャプチャリスト内の初期化式を使用して型を推論します。

キャプチャリストの省略

[]:外部変数をキャプチャしません。Lambda関数内で局所変数またはグローバル変数のみ使用できます。

Lambda関数ボディの引数がない場合

[=]() { /* Lambda関数ボディ */ }:キャプチャリストに = を書き、次に括弧内に引数リストを空にします。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1