既定のキャプチャ モードが参照キャプチャである場合、'var' は使用できません
ラムダ式の既定のキャプチャ モードが参照渡しであるを指定する場合は、その式の capture 句に参照によって変数を渡すことができません。
このエラーを解決するには
capture 句に明示的に変数を渡さないでください。
既定のキャプチャ モードとして参照渡しを指定しないでください。
既定のキャプチャ モードとして値渡しを指定します。
capture 句に値によって変数を渡します。 (これにより、ラムダ式の動作が変更される可能性があります。)
例
次の例では、変数 n
への参照が、既定モードが参照渡しであるラムダ式の capture 句にあるため、C3488 が生成されます。
// C3488a.cpp
int main()
{
int n = 5;
[&, &n]() { return n; } (); // C3488
}
次の例では、C3488 について考えられる 4 つの解決策を示します。
// C3488b.cpp
int main()
{
int n = 5;
// Possible resolution 1:
// Do not explicitly pass &n to the capture clause.
[&]() { return n; } ();
// Possible resolution 2:
// Do not specify by-reference as the default capture mode.
[&n]() { return n; } ();
// Possible resolution 3:
// Specify by-value as the default capture mode.
[=, &n]() { return n; } ();
// Possible resolution 4:
// Pass n by value to the capture clause.
[n]() { return n; } ();
}