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関数ボディ */ }
:キャプチャリストに = を書き、次に括弧内に引数リストを空にします。