Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wartość "var" nie jest dozwolona, gdy domyślny tryb przechwytywania jest przy użyciu odwołania
Uwagi
Po określeniu, że domyślny tryb przechwytywania dla wyrażenia lambda jest odwołaniem, nie można przekazać zmiennej przez odwołanie do klauzuli capture tego wyrażenia.
Aby poprawić ten błąd
Nie przekazuj jawnie zmiennej do klauzuli capture lub
Nie należy określać przy użyciu odwołania jako domyślnego trybu przechwytywania lub
Określ wartość według jako domyślny tryb przechwytywania lub
Przekaż zmienną według wartości do klauzuli capture. (Może to zmienić zachowanie wyrażenia lambda).
Example
Poniższy przykład generuje C3488, ponieważ odwołanie do zmiennej n pojawia się w klauzuli przechwytywania wyrażenia lambda, którego tryb domyślny jest odwołaniem:
// C3488a.cpp
int main()
{
int n = 5;
[&, &n]() { return n; } (); // C3488
}
W poniższym przykładzie przedstawiono cztery możliwe rozwiązania 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; } ();
}