V815. Decreased performance. Consider replacing the expression 'AA' with 'BB'.
Анализатор обнаружил конструкцию, которую потенциально можно оптимизировать. В классах строк, реализованы операторы, которые позволяют более эффективно очистить строку или проверить что строка является пустой.
Рассмотрим пример:
bool f(const std::string &s)
{
if (s == "")
return false;
....
}
Этот код можно немного улучшить. Объект класса 'std::string' знает длину строки, которую он хранит. Но не известно с какой строкой его хотят сравнить. Поэтому, запускается цикл для сравнения строк. Намного проще, просто проверить, что длина строки равна 0. Для этого следует использовать функцию 'empty()':
if (s.empty())
return false;
Аналогичная ситуация. Требуется очистить строку. Следующий код можно немного улучшить:
wstring str;
...
str = L"";
Улучшенный вариант:
wstring str;
...
str.clear();
Примечание. Описанные рекомендации спорны. Выигрыш от такой оптимизации крайне мал, но при этом возрастает риск допустить опечатку и использовать не ту функцию. Причина - неудачное именование функций. Например, в классе 'std::string' функция 'empty()' проверяет, что строка пустая. В классе 'CString', функция 'Empty()' очищает строку. Одно название, но разные действия. Поэтому, для улучшения читаемости кода вполне допустимо использовать конструкции: = "", == "", != "".
Выбор за вами. Если диагностика V815 вам не нравится, вы можете отключить её в настройках.