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