Kompilatorfel C3488

Var tillåts inte när standardfångstläget är som referens

Anmärkningar

När du anger att standardläget för avbildning för ett lambda-uttryck är som referens kan du inte skicka en variabel med referens till avbildningssatsen för uttrycket.

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

  • Ange inte variabeln uttryckligen i capture-satsen, eller

  • Ange inte med referens som standard för fångstläget, eller

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

  • Skicka variabeln som värde till inkapslingsklausulen. (Detta kan ändra beteendet för lambda-uttrycket.)

Example

I följande exempel genereras C3488 eftersom en referens till variabeln n visas i avbildningssatsen för ett lambda-uttryck vars standardläge är som referens:

// C3488a.cpp

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

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

Se även

Lambda-uttryck