Partilhar via


Erro do compilador C3488

'var' não é permitido quando o modo de captura padrão é por referência

Observações

Quando você especifica que o modo de captura padrão para uma expressão lambda é por referência, não é possível passar uma variável por referência à cláusula capture dessa expressão.

Para corrigir este erro

  • Não passe explicitamente a variável para a cláusula de captura, ou

  • Não especifique "por referência" como o modo padrão de captura, ou

  • Especifique o modo de captura padrão como por valor ou

  • Passe a variável por valor para a cláusula de captura. (Isso pode alterar o comportamento da expressão lambda.)

Example

O exemplo a seguir gera C3488 porque uma referência à variável n aparece na cláusula capture de uma expressão lambda cujo modo padrão é by-reference:

// C3488a.cpp

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

O exemplo a seguir mostra quatro resoluções possíveis para 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; } ();
}

Consulte também

Expressões do Lambda