Kompilatorfel C3489

"var" krävs när standardläget för avbildning är per värde

Anmärkningar

När du anger att standardfångstläget för ett lambda-uttryck är värdebaserat kan du inte skicka en variabel med värde till fångstklassen för det uttrycket.

Så här åtgärdar du det här felet

  • Skicka inte variabeln explicit till capture-klausulen, eller

  • Ange inte eftervärde som standardläge för avbildning, eller

  • Ange referens som standard upptagningsläge, eller

  • Skicka variabeln som referens till infångningsklausulen. (Detta kan ändra beteendet för lambda-uttrycket.)

Example

Följande exempel genererar C3489-variabeln n förekommer genom värde i infångningsklausulen för ett lambda-uttryck vars standardinställning är genom värde.

// C3489a.cpp

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

I följande exempel visas fyra möjliga lösningar på 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; } ();
}

Se även

Lambda-uttryck