Udostępnij za pomocą


Błąd kompilatora C3488

Wartość "var" nie jest dozwolona, gdy domyślny tryb przechwytywania jest przy użyciu odwołania

Uwagi

Po określeniu, że domyślny tryb przechwytywania dla wyrażenia lambda jest odwołaniem, nie można przekazać zmiennej przez odwołanie do klauzuli capture tego wyrażenia.

Aby poprawić ten błąd

  • Nie przekazuj jawnie zmiennej do klauzuli capture lub

  • Nie należy określać przy użyciu odwołania jako domyślnego trybu przechwytywania lub

  • Określ wartość według jako domyślny tryb przechwytywania lub

  • Przekaż zmienną według wartości do klauzuli capture. (Może to zmienić zachowanie wyrażenia lambda).

Example

Poniższy przykład generuje C3488, ponieważ odwołanie do zmiennej n pojawia się w klauzuli przechwytywania wyrażenia lambda, którego tryb domyślny jest odwołaniem:

// C3488a.cpp

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

W poniższym przykładzie przedstawiono cztery możliwe rozwiązania C3488:

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

Zobacz też

Wyrażenia lambda