Udostępnij za pomocą


Błąd kompilatora C3489

Wartość "var" jest wymagana, gdy domyślny tryb przechwytywania to wartość by-value

Uwagi

Po określeniu, że domyślny tryb przechwytywania wyrażenia lambda to wartość by-value, nie można przekazać zmiennej według wartości do klauzuli capture tego wyrażenia.

Aby poprawić ten błąd

  • Nie przekazuj jawnie zmiennej do klauzuli capture lub

  • Nie należy określać wartości według jako domyślnego trybu przechwytywania lub

  • Określ według odwołania jako domyślny tryb przechwytywania lub

  • Przekaż zmienną, odwołując się do klauzuli capture. (Może to zmienić zachowanie wyrażenia lambda).

Example

Poniższy przykład generuje zmienną n C3489 wyświetlaną według wartości w klauzuli przechwytywania wyrażenia lambda, którego tryb domyślny jest wartością bajtową:

// C3489a.cpp

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

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

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

Zobacz też

Wyrażenia lambda