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


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

Переменная "var" обязательна, если режимом по умолчанию является передача параметров по значению

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

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

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

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

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

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

Примеры

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

// C3489a.cpp

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

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

См. также

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