C 0x でのラムダ キャプチャと定数
C 0x でラムダ式を扱うときによくある疑問が生じます。キャプチャする方法はありますか?
C 言語標準では、変数を値で取得するラムダ式が const 方式で取得されることを指定しています。これは、取得した値をラムダ内で変更できないことを意味します。ただし、特定のシナリオでは、変数を値でキャプチャしながらその値を変更する必要がある場合があります。
たとえば、キャプチャしたい非 const のoperator() メソッドを持つライブラリ ファンクターを考えてみましょう。ラムダを呼び出します。次のコードはコンパイルできません:
<code class="cpp">struct foo { bool operator () ( const bool & a ) { return a; } }; int main() { foo afoo; auto bar = [=] () -> bool { afoo(true); }; return 0; }</code>
ここでのエラーは、[=] キャプチャ リストで囲まれているため、ラムダ式の演算子() が const として宣言されていることです。これを修正するには、mutable キーワードを使用します。ラムダ キャプチャ リストに mutable を追加することで、値によってキャプチャされた変数であってもラムダがキャプチャされた変数を変更できるようになります。
<code class="cpp">auto bar = [=] () mutable -> bool { afoo(true); };</code>
この変更により、ラムダの Operator() が const ではなくなり、非 const を呼び出すことができるようになります。 afoo オブジェクトの -const 演算子()。
したがって、ラムダ式で値によってキャプチャし、キャプチャされた値が const になるのを防ぐには、キャプチャ リストで mutable キーワードを使用します。これにより、ラムダはコンパイル エラーを引き起こすことなく、キャプチャされた変数を変更できるようになります。
以上がC ラムダ式で値によってキャプチャし、キャプチャされた変数を変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。