ラムダ式 int x = 0; auto f = [x]() { x++; }; がコンパイルエラーになる理由として正しいものはどれですか?
ラムダ式は内部的にはクラスとして扱われ、その operator() はデフォルトで const メンバ関数になります。そのため値でキャプチャした変数(ここではx)は、ラムダ内では書き換えられません。変更したい場合は [x]() mutable { x++; } のように mutable を付けます。ただしその変更はラムダ内部のコピーにだけ作用し、外側のxには影響しません。外側の変数を書き換えたいなら、参照キャプチャの [&x] を使います。戻り値の型は省略でき、自動で推論されます。