Lambda関数のImmutableについて
公式ドキュメントでLambda関数はdefaultで引数がImmutable(不変)と書いてあったがよく分からなかったので、実際に試してみました。
- []の中の値がキャプチャと呼ばれていて、以下のようなCopyキャプチャは変数を変更不可能(Const)らしいですね。
int x = 100;
auto hoge = [x]() {
x = 3; // compilation error
};
hoge();
- ()の中の値がパラメーターと呼ばれていて、普通の関数同様に変数xに値を代入できます。
auto hoge = [](int x) {
x = 3;
};
int num = 100;
hoge(num);
- 普通の関数同様にconstをつければちゃんとerrorを吐いてくれます。
auto hoge = [](const int x) {
x = 3; //compilation error
};
int num = 100;
hoge(num);
まとめ
書き方によって挙動が違うのは分かりづらいですね。やっぱり引数にconstが付いていると安心できます。
参考