C++ ラムダ式の基本とキャプチャ
C++のラムダ式についてメモを残します。
ラムダ式の基本
// 引数と返り値を省略しない
auto show = [](int num)-> void{
std::cout << num << std::endl;
};
// 引数と返り値を省略する
auto show2 = [](){
std::cout << 'a' << std::endl;
};
show(42); // 42
show2(); // a
- 関数をその場で定義する構文
- 関数の引数かautoで宣言した変数に代入することが多い
- ラムダ式はコンパイラが自動で作る一意の型を持ったオブジェクトになるのでautoで宣言する必要がある
- 引数がない場合や返り値がない場合もある
キャプチャ
int a = 0;
int b = 22;
// この時点のaがコピーされる
auto lamda = [a](){
std::cout << a << std::endl;
};
// aのみコピーされてbはされない
// mutableを宣言したのでaは変更可能
auto lamda2 = [=]() mutable{
a = 200;
std::cout << a << std::endl;
};
a = 100;
lamda(); // 0
lamda2(); // 200
- ラムダ式の外側で宣言されている変数のコピーをラムダ式内部で使えるようにする
- 引数のようにラムダ式を呼ぶときに渡さなくても良い
- [=]でデフォルトキャプチャ、コンパイラが必要な分だけ自動出キャプチャしてくれる
- キャプチャした変数は暗黙的にconstとなるため変更することはできない
- mutableを宣言すると変更できるが、すべてのキャプチャした変数に影響が出る
- [&a]など参照でキャプチャすることもできる
Author And Source
この問題について(C++ ラムダ式の基本とキャプチャ), 我々は、より多くの情報をここで見つけました https://qiita.com/AtsushiEsashika/items/87c56d5c85760db60d17著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .