Compartilhar via


Erro do compilador C3489

'var' é necessário quando o modo de captura padrão é por valor

Quando você especifica que o modo de captura padrão para uma expressão lambda é por valor, não é possível passar uma variável por valor para a cláusula de captura 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 valor como o modo de captura padrão, ou

  • Especifique por referência como o modo de captura padrão, ou

  • Passe a variável por referência à cláusula de captura. (Isso pode alterar o comportamento da expressão lambda.)

Exemplos

O seguinte exemplo gera o erro C3489: a variável n aparece por valor na cláusula capture de uma expressão lambda cujo modo padrão é por valor:

// C3489a.cpp

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

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

Confira também

Expressões Lambda