最終更新日時(UTC):
が更新

履歴 編集

[=]によるthisの暗黙のキャプチャを非推奨化(C++20)

概要

C++20からは、ラムダ式でのデフォルトコピーのキャプチャ指定[=]では、thisポインタがキャプチャされなくなる。

C++20からは[=, this]のようにデフォルトコピーのキャプチャとthisを別々に指定できるようになるため、両方のキャプチャが必要になる場合は、それぞれ指定すること。

#include <iostream>

struct X {
  void f()
  {
    int value = 3;

    auto x = [=] {        // C++20からは非推奨な方法:
      return value + g(); // 従来は[=]の指定でthisポインタもキャプチャされ、クラスのメンバをラムダ式内で扱えていた
    };

    auto y = [=, this] {  // C++20から推奨される方法:
      return value + g(); // [=]ではthisポインタはキャプチャされなくなるため、thisを指定してキャプチャすること
    };
  }

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

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

関連項目

参照