Delen via


Compilerfout C3489

'var' is vereist wanneer de standaard vastlegmodus door waarde is

Opmerkingen

Wanneer u opgeeft dat de standaardopnamemodus voor een lambda-expressie by-value is, kunt u een variabele niet op waarde doorgeven aan de capture-component van die expressie.

Deze fout corrigeren

  • Geef de variabele niet expliciet door aan de capture-component of

  • Geef geen waarde op als standaardopnamemodus of

  • Geef "bij verwijzing" op als de standaardopnamemodus, или

  • Geef de variabele door als referentie aan de 'capture clause'. (Dit kan het gedrag van de lambda-expressie wijzigen.)

Example

In het volgende voorbeeld verschijnt een C3489-variabele n als waarde in de capturingclausule van een lambda-expressie waarvan de standaardmodus als waarde is.

// C3489a.cpp

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

In het volgende voorbeeld ziet u vier mogelijke oplossingen voor 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; } ();
}

Zie ook

Lambda-expressies