Sdílet prostřednictvím


Chyba kompilátoru C3489

"var" se vyžaduje, pokud je výchozí režim zachycení podle hodnoty.

Poznámky

Pokud určíte, že výchozí režim zachycení výrazu lambda je podle hodnoty, nelze předat proměnnou hodnotou do klauzule capture tohoto výrazu.

Oprava této chyby

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

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

  • Určení podle odkazu jako výchozího režimu zachycení nebo

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

Example

Následující příklad vygeneruje proměnnou n C3489 podle hodnoty v klauzuli capture výrazu lambda, jehož výchozí režim je podle hodnoty:

// C3489a.cpp

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

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

Viz také

Výrazy lambda