最終更新日時: 2025年07月10日 10時26分30秒 (JST)
Koichi Murase が更新

履歴 編集

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

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

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

## 概要

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

## 関連項目

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

## 参照

- P0806R2 Deprecate implicit capture of this via `[=]`