Delen via


Compilerfout C3488

'var' is niet toegestaan wanneer de standaardopnamemodus by-reference is

Opmerkingen

Wanneer u opgeeft dat de standaardopnamemodus voor een lambda-expressie by-reference is, kunt u een variabele niet doorgeven door te verwijzen naar de capture-component van die expressie.

Deze fout corrigeren

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

  • Specificeer niet via referentie als de standaard opnamemodus, of

  • Stel 'by-value' in als de standaardcapturamodus of

  • Geef de variabele door via waarde aan de capture-clausule. (Dit kan het gedrag van de lambda-expressie wijzigen.)

Example

In het volgende voorbeeld wordt C3488 gegenereerd omdat er een verwijzing naar de variabele n wordt weergegeven in de capture-component van een lambda-expressie waarvan de standaardmodus by-reference is:

// C3488a.cpp

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

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

Zie ook

Lambda-expressies