Skip to content

Latest commit

 

History

History
51 lines (36 loc) · 1.56 KB

allow_lambda_capture_equal_this.md

File metadata and controls

51 lines (36 loc) · 1.56 KB

ラムダ式のキャプチャとして[=, this]を許可する [P0409R2]

  • cpp20[meta cpp]

このページはC++20に採用された言語機能の変更を解説しています。

のちのC++規格でさらに変更される場合があるため関連項目を参照してください。

概要

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();
}

参照