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


C3488-ás fordítóhiba

A "var" nem engedélyezett, ha az alapértelmezett rögzítési mód referenciaként szolgál

Megjegyzések

Ha azt adja meg, hogy a lambda kifejezés alapértelmezett rögzítési módja referencia, nem adhat át változót a kifejezés rögzítési záradékára való hivatkozással.

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 az alapértelmezett rögzítési módként a referencia szerinti módot, vagy

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

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

Example

Az alábbi példa C3488-at hoz létre, mert a változóra n mutató hivatkozás megjelenik egy lambda kifejezés rögzítési záradékában, amelynek alapértelmezett módja a hivatkozás:

// C3488a.cpp

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

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

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

Lásd még

Lambda-kifejezések