Inefficient string length computation

Длина строки, вычисленная при помощи длины строки, функционирует по возврату из 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
Удар: высоко

Введенный в R2020a