C 0x Lambda キャプチャは Const にならずに変更できますか?
C 0x の Lambda キャプチャは通常、本質的に定数である参照によって変数をキャプチャします。 。ただし、特定のシナリオでは、キャプチャされた変数の変更が必要となり、「キャプチャされた値を非 const にできるか?」という疑問が生じます。
非 const メソッド、operator() を使用したライブラリ ファンクター foo を考えてみましょう。これはラムダ内で呼び出す必要があります。以下のコード スニペットはこれを試みますが、コンパイルに失敗します:
<code class="c++">struct foo { bool operator () ( const bool & a ) { return a; } }; auto bar = [=] () -> bool { afoo(true); };</code>
キャプチャされた値が定数であるため、ラムダの演算子() が暗黙的に const としてマークされているため、コンパイル エラーが発生します。この問題を解決するために、C 0x は mutable キーワードを提供します。
<code class="c++">auto bar = [=] () mutable -> bool { afoo(true); };</code>
mutable を追加すると、ラムダの Operator() が const ではなくなり、ラムダ内でキャプチャされた変数を変更できるようになります。これにより、必要に応じてラムダ内でライブラリ ファンクターやその他の非 const キャプチャ値を変更できるようになります。
以上がC 0x Lambda キャプチャは const にせずに変更できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。