std::string
methods instead of more efficient
overloadstd::string
метод вызван строковым литералом известной длины вместо одного заключенного в кавычки символа
Этот дефект происходит, когда вы вызываете определенный std::string
методы со строковым литералом известной длины вместо одного заключенного в кавычки символа. Когда определенный std::string
методы вызваны строковым литералом, метод должен вычислить длину литерала даже при том, что информация известна во время компиляции. Polyspace отмечает такие вызовы как неэффективные. Например, Polyspace® отмечает первые два вызова std::string::find
:
std::string str; //... str.find("A");//Inefficient //... str.find("ABC",offset,1);//Inefficient str.find('A');//Efficient
std::string
методы вызываются при помощи строкового литерала известной длины вместо одного заключенного в кавычки символа:
find
rfind
find_first_of
find_last_of
find_first_not_of
find_last_not_of
replace
operator=
operator+=
starts_with
(C++ 20)
ends_with
(C++ 20)
В некоторых случаях можно вызвать std::string
методы или со строковым литералом или с одним заключенным в кавычки символом. В этих случаях это неэффективно, чтобы вызвать std::string
методы со строковым литералом, потому что такие вызовы обеспечивают компилятор, чтобы вычислить длины строковых литералов, который уже известен перед временем выполнения. Поскольку std::string
методы часто используются, неэффективные вызовы этих методов могут привести к дорогому и неэффективному коду.
Чтобы устранить эту проблему, вызовите std::string
методы при помощи одного заключенных в кавычки символов вместо строкового литерала в надлежащих случаях. Например, вы можете использовать один заключенный в кавычки символ в качестве входа вместо строкового литерала, состоящего из отдельного символа или повторение отдельного символа. Вы можете должны быть использовать различную перегрузку метода, который принимает один заключенный в кавычки символ.
Повышения производительности могут варьироваться на основе компилятора, реализации библиотеки и среды, которую вы используете.
Группа: Производительность |
Язык: C++ |
Значение по умолчанию: Off |
Синтаксис командной строки:
EXPENSIVE_USE_OF_STD_STRING_METHODS |
Удар: низко |