>
>
>
V659. Functions' declarations with 'Foo…


V659. Functions' declarations with 'Foo' name differ in 'const' keyword only, while these functions' bodies have different composition. It is suspicious and can possibly be an error.

Анализатор обнаружил в коде две функции с одинаковыми именами. Функции различаются константностью.

Объявления функции могут различаться:

  • константностью возвращаемого значения;
  • константностью аргументов;
  • константностью самой функции (в случае методов класса).

Хотя имена функций совпадают, они работают по-разному. Это может свидетельствовать об ошибке.

Рассмотрим простой случай:

class CLASS {
  DATA *m_data;
public:
  char operator[](size_t index) const {
    if (!m_data || index >= m_data->len)
      throw MyException;
    return m_data->data[index];
   }

  char &operator[](size_t index) {
    return m_data->data[index];
  }
};

В константной функции 'operator[]' существует проверка и генерируется исключение в случае ошибки. В неконстантной функции такой поверки нет. Скорее всего, это недочёт, который должен быть исправлен.

Анализатор учитывает набор различных ситуаций, когда различия в телах функций оправданы. Однако всё исключительные ситуации учесть невозможно. Если анализатор выдал ложное срабатывание, то его можно подавить, используя комментарий "//-V659".