Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
'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; } ();
}