﻿# V801\. Decreased performance\. It is better to redefine the N function argument as a reference\. Consider replacing 'const T' with 'const \.\. &T' / 'const \.\. \*T'\.

Анализатор обнаружил конструкцию, которую потенциально можно оптимизировать\. В функцию передается объект, представляющий собой класс или структуру\. Этот объект передается по значению, но при этом не модифицируется, так как имеется ключевое слово const\. Возможно, рационально передавать этот объект с помощью константной ссылки в языке Си\+\+\. Или с помощью указателя в языке Си\.

Пример:

```cpp
bool IsA(const std::string s)
{
  return s == A;
}
```

При вызове этой функции произойдет вызов конструктора копирования для класса std::string\. Если подобное копирование объектов происходит часто, то это может существенно снижать производительность приложения\. Данный код можно легко оптимизировать, добавив ссылку:

```cpp
bool IsA(const std::string &s)
{
  return s == A;
}
```

Анализатор не выдаёт предупреждение, если по значению передаётся простая структура данных \(POD\), размером не больше размера указателя\. Если передавать такую структуру по ссылке, то никакого выигрыша не будет\.

**Дополнительные ресурсы:**

1. Wikipedia\. [Reference \(C\+\+\)\.](https://en.wikipedia.org/wiki/Reference_(C%2B%2B))
1. Bjarne Stroustrup\. The C\+\+ Programming Language \(Third Edition and Special Edition\)\.  11\.6 \- Large Objects\.