﻿# V714\. Variable is not passed into foreach loop by reference, but its value is changed inside of the loop\.

Анализатор обнаружил в коде подозрительную ситуацию\. Присутствует foreach, в котором имеется присваивание контрольной переменной цикла \(loop control variable\) некоторого значения\. В то же время, передача контрольной переменной цикла идёт по значению\. Скорее всего, имелась в виду передача по ссылке\.

Пример:

```cpp
for (auto t : myvector)
  t = 17;
```

Это приведёт к копированию переменной 't' на каждой итерации и изменению локальной копии, что вряд ли то, что хотел программист\. Скорее всего, хотелось изменить значения в контейнере 'myvector'\. Корректно данный участок кода будет выглядеть следующим образом:

```cpp
for (auto & t : myvector)
  t = 17;
```

Данная диагностика диагностирует лишь самые простые случаи некорректного использования цикла foreach, поскольку в них проще всего совершить ошибку\. В случае более сложных конструкций программист наверняка лучше знает, что он делает и следующие ситуации иногда встречаются в реальном коде:

```cpp
for (auto t : myvector)
{
  function(t); // Использовали t по назначению
  // Далее t используется как локальная переменная
  t = anotherFunction();
  if (t)
    break;
}
```

На этот код анализатор не будет выдавать предупреждение V714\.