ホームページ  >  記事  >  バックエンド開発  >  値でキャプチャする場合、C 0x Lambda でキャプチャされた値を変更するにはどうすればよいですか?

値でキャプチャする場合、C 0x Lambda でキャプチャされた値を変更するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-04 13:44:02715ブラウズ

How Can I Modify Captured Values in C  0x Lambdas When Capturing by Value?

値によるラムダ キャプチャ: 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 サイトの他の関連記事を参照してください。

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