次の方法で共有


コンパイラ エラー C3489

既定のキャプチャ モードが値キャプチャである場合、'var' が必要です

ラムダ式の既定のキャプチャ モードが値渡しであることを指定する場合は、その式の capture 句に値によって変数を渡すことができません。

このエラーを解決するには

  • capture 句に明示的に変数を渡さないでください。

  • 既定のキャプチャ モードとして値渡しを指定しないでください。

  • 既定のキャプチャ モードとして参照渡しを指定します。

  • capture 句に参照によって変数を渡します。 (これにより、ラムダ式の動作が変更される可能性があります。)

次の例では、既定のモードが値渡しであるラムダ式の capture 句に、変数 n が値渡しで出現し、C3489 が生成されます。

// C3489a.cpp

int main()
{
   int n = 5;
   [=, n]() { return n; } (); // C3489
}

次の例では、C3489 について考えられる 4 つの解決策を示します。

// C3489b.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-value as the default capture mode.
   [n]() { return n; } ();

   // Possible resolution 3:
   // Specify by-reference as the default capture mode.
   [&, n]() { return n; } ();

   // Possible resolution 4:
   // Pass n by reference to the capture clause.
   [&n]() { return n; } ();
}

関連項目

ラムダ式