﻿# V815\. Decreased performance\. Consider replacing the expression 'AA' with 'BB'\.

Анализатор обнаружил конструкцию, которую потенциально можно оптимизировать\. В классах строк, реализованы операторы, которые позволяют более эффективно очистить строку или проверить что строка является пустой\.

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

```cpp
bool f(const std::string &s)
{
  if (s == "")
    return false;
  ....
}
```

Этот код можно немного улучшить\. Объект класса 'std::string' знает длину строки, которую он хранит\. Но не известно с какой строкой его хотят сравнить\. Поэтому, запускается цикл для сравнения строк\. Намного проще, просто проверить, что длина строки равна 0\. Для этого следует использовать функцию 'empty\(\)':

```cpp
if (s.empty())
  return false;
```



Аналогичная ситуация\. Требуется очистить строку\. Следующий код можно немного улучшить:

```cpp
wstring str;
...
str = L"";
```

Улучшенный вариант:

```cpp
wstring str;
...
str.clear();
```



**Примечание\.** Описанные рекомендации спорны\. Выигрыш от такой оптимизации крайне мал, но при этом возрастает риск допустить опечатку и использовать не ту функцию\. Причина \- неудачное именование функций\. Например, в классе 'std::string' функция 'empty\(\)' проверяет, что строка пустая\. В классе 'CString', функция 'Empty\(\)' очищает строку\. Одно название, но разные действия\. Поэтому, для улучшения читаемости кода вполне допустимо использовать конструкции: \= "", \=\= "", \!\= ""\.

Выбор за вами\. Если диагностика V815 вам не нравится, вы можете отключить её в настройках\.