﻿# 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\.

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

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

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

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

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

```cpp
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"\.