﻿# V834\. Incorrect type of a loop variable\. This leads to the variable binding to a temporary object instead of a range element\.

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

Рассмотрим пример:

```cpp
void foo(const std::unordered_map<int, std::string>& map)
{
  for (const std::pair<int, std::string> &i : map)
  {
    std::cout << i.second;
  }
}
```

В данном фрагменте кода разработчик хочет перебрать в цикле все элементы контейнера 'std::unordered\_map' и напечатать значения в поток вывода\. Однако тип элементов не 'std::pair<int, std::string\>', как ожидалось разработчиком, а 'std::pair<**const int**, std::string\>'\. Несоответствие аргументов шаблона 'std::pair' приводит к тому, что каждый элемент контейнера будет [неявно конвертироваться](https://timsong-cpp.github.io/cppwp/n4861/dcl.init.ref#5.4.2) ко временному объекту типа 'std::pair<const int, std::string\>', а затем ссылка привязывается к нему\.

Решить эту проблему можно двумя способами:

**Первый способ\.** Использовать правильный тип переменной цикла\. В общем случае достаточно посмотреть, значение какого типа возвращает [итератор](https://pvs-studio.ru/ru/blog/terms/6540/) используемого контейнера при разыменовании \(operator \*\)\.

```cpp
void foo(const std::unordered_map<int, std::string> &map)
{
  for (const std::pair<const int, std::string> &i : map)
  {
    std::cout << i.second;
  }
}
```

**Второй способ\.** Использовать тип 'auto' для автоматического вывода типа элементов контейнера\.

```cpp
void foo(const std::unordered_map<int, std::string> &map)
{
  for (const auto &i : map)
  {
    std::cout << i.second;
  }
}
```

Очевидно, что второй способ является более удобным, так как сокращает количество кода и исключает возможность написания неправильного типа\.