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)