exponenta event banner

Значения параметра Const могут вызвать ненужные копии данных

Значения параметра Const могут предотвратить операцию перемещения, что приведет к более ресурсоемкой операции копирования

Описание

Этот дефект возникает, когда const объекты как параметры функции могут предотвращать операцию перемещения, приводящую к более интенсивной операции копирования.

Средство проверки не проверяет, возможна ли операция перемещения в данном вызове функции. Шашка просто подсвечивает const параметры функции, имеющие типы классов с нетривиальной операцией копирования и операцией перемещения. Можно самостоятельно определить, можно ли переместить параметр в вызываемую функцию.

Риск

Если аргумент функции является значением rvalue, ресурсы, связанные с аргументом, больше не требуются и могут быть перемещены в параметры вызываемой функции. Компиляторы обеспечивают использование операции перемещения в этой ситуации, поскольку они, как правило, дешевле операций копирования. Если используется const объект в качестве параметра функции явно запрещает оптимизацию компилятора.

Зафиксировать

Если вы считаете, что параметр можно переместить в вызываемую функцию, удалите const квалификатор из помеченного параметра функции.

Повышение производительности может зависеть от используемого компилятора, реализации библиотеки и среды.

Примеры

развернуть все

#include <string>

std::string getStringFromUser() {
    //Get a string of arbitrary length
}

void countWordsInString(const std::string str) {
    //Count number of words in string
}

void main() {
    std::string aString = getStringFromUser();
    std::string anotherString = getStringFromUser();
    
    std::string joinedString = aString + anotherString;
    
    countWordsInString(joinedString);
    countWordsInString(aString + anotherString);
}

В этом примере средство проверки помечает const str::string параметр str. В ситуациях, когда возможна операция перемещения, например, в вызове:

countWordsInString(aString + anotherString);
const параметр форсирует операцию копирования, которая может быть значительно дороже.

Информация о результатах

Группа: Производительность
Язык: C++
По умолчанию: Откл.
Синтаксис командной строки: CONST_PARAMETER_VALUE
Воздействие: Низкий
Представлен в R2020a