std::string методы вместо более эффективной перегрузкиОдин std::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++ |
| По умолчанию: Откл. |
Синтаксис командной строки:
EXPENSIVE_USE_OF_STD_STRING_METHODS |
| Воздействие: Низкий |