最終更新日時:
が更新

履歴 編集

ラムダ式のキャプチャとして[=, this]を許可する(C++20)

概要

C++17まで、ラムダ式のキャプチャとして[=, this]は指定できなかった。これは、デフォルトコピーキャプチャ (=) に、thisポインタのコピーキャプチャが含まれるため、重複指定はできないというものである。

C++20では、[=, this]のキャプチャ指定を許可する。これは、意味としては[=]と同等である。明示的にthisポインタをキャプチャして使用するという表明によって、可読性を向上させる目的に使える。

#include <iostream>

struct X {
  void f()
  {
    int value = 3;
    auto x = [=, this] { // [=]キャプチャと同等
      return value + g();
    };
    std::cout << x() << std::endl;
  }

  int g() const
  {
    return 2;
  }
};

int main()
{
  X().f();
}

関連項目

参照