Condividi tramite


Errore del compilatore C3488

'var' non è consentito quando la modalità di acquisizione predefinita è per riferimento

Quando si specifica che la modalità di acquisizione predefinita per un'espressione lambda è in base al riferimento, non è possibile passare una variabile per riferimento alla clausola di acquisizione dell'espressione.

Per correggere l'errore

  • Non passare in modo esplicito la variabile alla clausola di acquisizione oppure

  • Non specificare l'acquisizione per riferimento come modalità predefinita oppure

  • Specificare l'acquisizione per valore come modalità predefinita oppure

  • Passare la variabile per valore alla clausola di acquisizione. In questo modo il comportamento dell'espressione lambda potrebbe cambiare.

Esempi

L'esempio seguente genera l'errore C3488 perché viene visualizzato un riferimento alla variabile n nella clausola di acquisizione di un'espressione lambda la cui modalità predefinita è per riferimento:

// C3488a.cpp

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

L'esempio seguente mostra quattro possibili soluzioni all'errore 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; } ();
}

Vedi anche

Espressioni lambda