std::string
methods instead of more efficient
overloadСистема координат 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++ |
По умолчанию: Off |
Синтаксис командной строки
: EXPENSIVE_USE_OF_STD_STRING_METHODS |
Влияние: Низкое |