Длина строки, вычисленная с помощью функций длины строки при возврате из std::basic_string::c_str()
вместо использования std::basic_string::length()
Этот дефект возникает, когда длина std::basic_string
строка вычисляется с помощью функций string length на указателе, возвращенном из std::basic_string::c_str()
вместо использования метода std::basic_string::length()
.
Шашка помечает функции длины строки, такие как strlen
, wcslen
и char_traits::length
.
std::basic_string::c_str()
возвращает указатель на символьный массив с обрыв null, который хранит те же данные, что и данные, хранимые в строке. Использование функции длины строки, такой как 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 |
Влияние: Средний |