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)