値によるラムダ キャプチャ: C 0x で非 Const キャプチャ値を確保する
C 0x ラムダ式で値によってキャプチャする場合、キャプチャされた値は自動的に一定になります。これは、ラムダ内でキャプチャした値を変更する必要がある場合に問題になる可能性があります。
たとえば、値によって struct foo をキャプチャする次のラムダを考えてみましょう。
<code class="cpp">struct foo { bool operator() (const bool &a) { return a; } }; int main(int argc, char* argv[]) { foo afoo; auto bar = [=] () -> bool { afoo(true); }; return 0; }</code>
このコードは次のようになります。 foo の Operator() メソッドが const として宣言されているため、コンパイルできません。この問題を解決するには、operator() メソッドを非 const にします:
<code class="cpp">struct foo { bool operator() (bool &a) { return a; } };</code>
ただし、これは必ずしも望ましい解決策であるとは限りません。場合によっては、値を値ごとにキャプチャしながら、ラムダ内で変更されないようにしたい場合があります。
これを実現するには、mutable キーワードを使用します。ラムダを [=] () mutable として宣言することで、 bool を使用すると、ラムダがキャプチャされた値を変更できるようになります。
例:
<code class="cpp">auto bar = [=] () mutable -> bool { afoo(true); };</code>
この例では、ラムダはキャプチャされた afoo オブジェクトを変更できるようになりました。ただし、値によってキャプチャされます。
以上が値でキャプチャする場合、C 0x Lambda でキャプチャされた値を変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。