Const parameter values may cause unnecessary data copies

Значения параметров 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++
По умолчанию: Off
Синтаксис командной строки : CONST_PARAMETER_VALUE
Влияние: Низкое
Введенный в R2020a