次の方法で共有


コンパイラ エラー C3488

既定のキャプチャ モードが参照キャプチャである場合、'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; } ();
}

関連項目

ラムダ式