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