Поделиться через


Ошибка компилятора C3488

var не разрешен, если по умолчанию параметры передаются по ссылке

Если вы указываете, что для лямбда-выражения по умолчанию используется режим передачи по ссылке, то в предложение передачи этого выражения нельзя передать значение по ссылке.

Исправление ошибки

  • Не передавайте переменную в предложение передачи явным образом или

  • Не указывайте режим передачи по ссылке в качестве режима по умолчанию.

  • Укажите режим передачи по значению в качестве режима по умолчанию.

  • Передайте переменную в предложение передачи по значению. (Это может изменить поведение лямбда-выражения.)

Примеры

В приведенном ниже примере возникает ошибка C3488, так как ссылка на переменную n появляется в предложении передачи лямбда-выражения, режим передачи по умолчанию которого — по ссылке.

// C3488a.cpp

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

В следующем примере показаны четыре возможных способа устранения ошибки 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; } ();
}

См. также

Лямбда-выражения