﻿# V788\. Consider reviewing a captured variable in lambda expression\.

Анализатор обнаружил подозрительный захват переменной в лямбда функции\.

Рассмотрим несколько случаев срабатывания анализатора\.

Пример 1:

```cpp
int x = 0;
auto f = [x] { };
....
x = 42;
f();
....
```

Переменную, значение которой может быть точно вычислено в compile\-time, захватывают в лямбда функции по значению\. Внутри этой функции значение переменной будет таким, которым оно было в момент захвата, а не то, которая имеет эта переменная в момент вызова лямбда функции\. Возможно, необходимо захватить переменную по ссылке\.

```cpp
int x = 0;
auto f = [&x] { };
....
x = 42;
f();
....
```

Также возможно, что в ходе рефакторинга был удалён код, который присваивал переменной какое\-либо значение\.

```cpp
int x = 0;
if (condition) x = 42;
else x = 43;
auto f = [x] { };
```

Если необходимо захватить некую константу, следует явно указать в типе переменной `const` или `constexpr`\.

```cpp
constexpr int x = 0;
auto f = [x] { };
```

Пример 2:

```cpp
int x;
auto f = [x] { };
```

Неинициализированная переменная захватывается по значению\. Её использование приведёт к неопределенному поведению\. Если предполагалось, что вызов функции должен проинициализировать переменную, её необходимо захватить по ссылке\.

```cpp
int x;
auto f = [&x] { x = 42; };
```