std::string с пустым строковым литераломИспользование 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++ |
| По умолчанию: Откл. |
Синтаксис командной строки:
UNNECESSARY_EMPTY_STRING_LITERAL |
| Воздействие: Низкий |
Expensive constant std::string construction | Expensive std::string::c_str() use in a std::string operation | Find defects (-checkers)