Megosztás a következőn keresztül:


C3489 fordítási hiba

A 'var' akkor szükséges, ha az alapértelmezett rögzítési módja az érték szerinti (by-value).

Megjegyzések

Ha megadja, hogy a lambda kifejezés alapértelmezett rögzítési módja érték szerint legyen megadva, nem adhat át változót érték szerint a kifejezés rögzítési záradékának.

A hiba kijavítása

  • Ne adja át explicit módon a változót a rögzítési záradéknak, vagy

  • Ne adja meg a by-value-t alapértelmezett rögzítési módként, vagy

  • Adja meg a "by-reference"-et mint alapértelmezett rögzítési módot, vagy

  • Adja át a változót a rögzítési záradékra hivatkozva. (Ez megváltoztathatja a lambda kifejezés viselkedését.)

Example

Az alábbi példa a C3489 változót n értékként jeleníti meg egy lambda kifejezés rögzítési záradékában, amelynek alapértelmezett módja érték szerint történik.

// C3489a.cpp

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

Az alábbi példa négy lehetséges megoldást mutat be a C3489-nek:

// 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; } ();
}

Lásd még

Lambda-kifejezések