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

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

Mary-Kate Olsen
リリース: 2024-11-02 06:57:29
オリジナル
766 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート