ホームページ >バックエンド開発 >C++ >C 0x Lambda キャプチャは const にせずに変更できますか?

C 0x Lambda キャプチャは const にせずに変更できますか?

DDD
DDDオリジナル
2024-10-30 13:28:01854ブラウズ

Can C  0x Lambda Captures Be Modified Without Being Const?

C 0x Lambda キャプチャは Const にならずに変更できますか?

C 0x の Lambda キャプチャは通常、本質的に定数である参照によって変数をキャプチャします。 。ただし、特定のシナリオでは、キャプチャされた変数の変更が必要となり、「キャプチャされた値を非 const にできるか?」という疑問が生じます。

非 const メソッド、operator() を使用したライブラリ ファンクター foo を考えてみましょう。これはラムダ内で呼び出す必要があります。以下のコード スニペットはこれを試みますが、コンパイルに失敗します:

<code class="c++">struct foo
{
  bool operator () ( const bool &amp; 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。