V813. Decreased performance. The argument should probably be rendered as a constant pointer/reference.


Анализатор обнаружил конструкцию, которую потенциально можно оптимизировать. Аргумент, представляющий собой структуру или класс, передается в функцию по значению. Анализатор, проверяя тело функции, пришел к выводу, что этот аргумент не модифицируется. С целью оптимизации такой аргумент можно передавать как константную ссылку. Это может ускорить выполнение программы, поскольку при вызове функции будет скопирован только адрес, а не весь объект класса. Особенно заметна оптимизация, если класс содержит внутри себя большой объем данных.

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

void foo(Point p)
{
  float x = p.x;
  float y = p.y;
  float z = p.z;
  .... далее аргумент 'p' никак не используется....
}

Исправить такой код очень легко - достаточно изменить объявление функции:

void foo(const Point &p)
{
  float x = p.x;
  float y = p.y;
  float z = p.z;
  .... далее аргумент 'p' никак не используется....
}

Анализатор не выдаёт предупреждение, если структуры очень маленькие.

Примечание N1. Пользователь может сам указать размер структур, начиная с которого следует выдавать предупреждения.

Например, чтобы не выдавать сообщения для структур размером 32 байта и менее, можно написать комментарий:

//-V813_MINSIZE=33

Число 33 задаёт размер структуры, начиная с которого следует выдавать предупреждения.

Можно разместить комментарий в одном из глобальных файлов (например в StdAfx.h), чтобы комментарий начал оказывать влияние на весь проект.

Значение по умолчанию: 9.

Примечание N2. Анализатор может ошибаться, пытаясь понять, модифицируется переменная в теле функции или нет. Если вы заметили явно ложное срабатывание, просьба прислать нам соответствующий пример кода.

Если код корректен, то избавиться от ложного сообщения об ошибке можно добавив комментарий "//-V813".


Найденные ошибки

Проверено проектов
355
Собрано ошибок
13 303

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;