# V2018. Cast should not remove 'const' qualifier from the type that is pointed to by a pointer or a reference.

Данное диагностическое правило добавлено по просьбе пользователей.

Анализатор обнаружил ситуацию с удалением 'const'-квалификатора. Изменение объекта, объявленного с квалификатором 'const', через указатель/ссылку на не-'const' тип ведет к неопределенному поведению. Также зачастую такой код свидетельствует о плохом дизайне приложения.

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

    void read_settings(const char *buf);
    const char* get_settings_file_name();
    bool settings_present();
    // ....
    void init_settings()
    {
      const char name[MAX_PATH] = "default.cfg";
      if (settings_present())
      {
        strcpy((char *)name, get_settings_file_name());
      }
      read_settings(name);
    }

Для того, чтобы избежать неопределённого поведения, нужно отказаться от константности при объявлении локальной переменной:

    void read_settings(const char *buf);
    const char* get_settings_file_name();
    bool settings_present();
    // ....
    void init_settings()
    {
      char name[MAX_PATH] = "default.cfg";
      if (settings_present())
      {
        strcpy(name, get_settings_file_name());
      }
      read_settings(name);
    }