Ошибка компилятора 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; } ();
}