Sdílet prostřednictvím


Chyba kompilátoru C3488

"var" není povolen, pokud je výchozí režim zachycení podle odkazu

Poznámky

Pokud určíte, že výchozí režim zachycení výrazu lambda je odkazem, nelze předat proměnnou odkazem na klauzuli capture tohoto výrazu.

Oprava této chyby

  • Nepředávejte proměnnou explicitně do klauzule capture nebo

  • Nezadávejte podle odkazu jako výchozí režim zachycení nebo

  • Zadejte podle hodnoty jako výchozí režim zachycení, nebo

  • Předejte proměnnou hodnotou do klauzule capture. (Toto chování výrazu lambda může změnit.)

Example

Následující příklad generuje C3488, protože odkaz na proměnnou n se zobrazí v klauzuli capture výrazu lambda, jehož výchozí režim je podle odkazu:

// C3488a.cpp

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

Následující příklad ukazuje čtyři možná řešení na 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; } ();
}

Viz také

Výrazy lambda