Skip to content

Latest commit

 

History

History
47 lines (34 loc) · 1.38 KB

deprecate_implicit_capture_of_this_via_defcopy.md

File metadata and controls

47 lines (34 loc) · 1.38 KB

[=]によるthisの暗黙のキャプチャを非推奨化

  • cpp20[meta cpp]

概要

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

関連項目

参照