std::string
with empty string
literalИспользование std::string
с пустой строкой литерал может быть заменен менее дорогими вызовами std::basic_string
функции членства
В вашем коде C/C++ средство проверки отмечает эти операции:
Построение экземпляра std::string
при помощи литерала пустой строки
Присвоение литерала пустой строки к экземпляру std::string
Сравнение экземпляра std::string
к литералу пустой строки
Указания и ограничения по применению:
Средство проверки не отслеживает источник const char
переменные указателя, которые пусты и в конечном счете используются с std::string
.
Это средство проверки является частично устаревшим, когда вы используете текущие компиляторы. Компиляторы, такие как GCC 5.1 и Визуальный Studio® 2015 оптимизируют конструкцию от литерала пустой строки и обрабатывают его как идентичный конструкции по умолчанию.
Предыдущие операции могут быть заменены вызовами конструктора по умолчанию и empty
и clear
функции членства std::basic_string
шаблон класса. Определенные компиляторы могут сгенерировать дополнительные инструкции для явных операций по сравнению с использованием встроенных функций членства. Использование этих операций может уменьшать эффективность скомпилированного кода.
Замените явные операции, включающие литералы пустой строки этими вызовами конструктора по умолчанию и функций членства std::basic_string
.
Не Использовать | Использование |
---|---|
std::string s("");
|
std::string s;
|
std::string s = "";
|
std::string s;
|
s = "";
|
s.clear();
|
if (s == "")
|
if (s.empty())
|
return "";
|
return {};
|
void foo(const std::string& s = ""); | void foo(const std::string& s = {}); (C++ 11) или foo(const std::string &str2 = std::string()) |
foo(""); | foo({}) (C++ 11) или foo(std::string()) |
Class::Class() : str("") {//...} | Class::Class() : str() {//...} |
Повышения производительности могут варьироваться на основе компилятора, реализации библиотеки и среды, которую вы используете.
Группа: Производительность |
Язык: C++ |
Значение по умолчанию: Off |
Синтаксис командной строки:
UNNECESSARY_EMPTY_STRING_LITERAL |
Удар: низко |
Expensive constant std::string construction
| Expensive std::string::c_str() use in a std::string operation
| Find defects (-checkers)