ホームページ  >  記事  >  バックエンド開発  >  Lambda 関数は C 0x の非 Const 値をキャプチャできますか?

Lambda 関数は C 0x の非 Const 値をキャプチャできますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-02 06:57:29729ブラウズ

Can Lambda Functions Capture Non-Const Values in C  0x?

ラムダ キャプチャと変更可能なキャプチャ値

C 0x では、ラムダ式はローカル変数をキャプチャする強力な手段を提供します。ただし、デフォルトでは、値によってキャプチャされた変数は const として扱われます。これにより、キャプチャされた値の変更が必要なライブラリを操作するときに制限が生じる可能性があります。

次のシナリオを考えてみましょう:

<code class="cpp">struct foo
{
  bool operator() (const bool &a)
  {
    return a;
  }
};

int main()
{
  foo afoo;

  // Attempt to capture non-const reference by value
  auto bar = [=]() -> bool { afoo(true); };
}</code>

キャプチャされた値 afoo を変更しようとしたため、このコードはコンパイルに失敗します。非 const メンバー関数 afoo::operator() 内。

解決策: Mutable Lambda を使用する

キャプチャされた変数を変更する機能を維持しながら値でキャプチャするには、可変キーワードを使用できます。ラムダを可変として宣言することで、キャプチャされた値を含む内部状態の変更が可能になります。

<code class="cpp">auto bar = [=]() mutable -> bool { afoo(true); };</code>

この変更された例では、ラムダの Operator() はキャプチャされた afoo を変更し、コンパイルを解決することができます。エラー。 mutable キーワードがないと、ラムダはキャプチャされた非 const 値により const とみなされます。

以上がLambda 関数は C 0x の非 Const 値をキャプチャできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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