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 и Visual 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)