Длина строки, вычисленная при помощи длины строки, функционирует по возврату из std::basic_string::c_str()
вместо того, чтобы использовать std::basic_string::length()
Этот дефект происходит когда длина std::basic_string
строка вычисляется при помощи функций длины строки на указателе, возвращенном в std::basic_string::c_str()
вместо того, чтобы использовать метод std::basic_string::length()
.
Средство проверки отмечает функции длины строки, такие как strlen
, wcslen
и char_traits::length
.
std::basic_string::c_str()
возвращает указатель на отключенный пустым указателем символьный массив, который хранит те же данные как данные, хранимые в строке. Используя длину строки функционируют, такие как strlen
на этом символьном массиве, как ожидают, возвратит длину строки. Этот подход может казаться поверхностно эквивалентным использованию std::basic_string::length()
метод для длины строки.
Однако функциональный strlen(str)
имеет линейную сложность O (N), где N является длиной строки str
. Если str
имеет тип std::basic_string
, эта сложность является ненужной начиная с вызова std::basic_string::length()
метод возвращает длину более эффективно (со сложностью O (1)).
Если строка имеет тип std::basic_string
, получить длину строки, вместо того, чтобы использовать длину строки функционирует, такие как strlen
, например:
std::string s; auto len = strlen(s.ctr());
std::basic_string::length()
метод, например:std::string s; auto len = s.length();
Повышения производительности могут варьироваться на основе компилятора, реализации библиотеки и среды, которую вы используете.
Группа: Производительность |
Язык: C++ |
Значение по умолчанию: Off |
Синтаксис командной строки:
INEFFICIENT_BASIC_STRING_LENGTH |
Удар: Средняя |