Const return values may cause unnecessary data copies

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

Описание

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

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

Риск

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

Кроме того, функция вызова может сохранить возвращаемое значение в non-const объект. const- мыс возвращаемого значения не предотвращает операции на non-const объект.

Фиксация

Удалите const спецификаторы от функциональных возвращаемых значений.

Примеры

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

#include <string>

class stringPair {
    std::string str1;
    std::string str2;
    
    public: 
    stringPair& operator=(const stringPair & aPair){
        if(&aPair != this) {
            str1 = aPair.str1;
            str2 = aPair.str2;
        }
        return *this;
    }
    
    const std::string getJoinedString(void) {
        return (str1 + str2);
    }
};

В этом примере, const спецификатор на возвращаемом значении getJoinedString обеспечивает операцию копии вместо операций пересылки.

Проверяйте информацию

Группа: Производительность
Язык: C++
Значение по умолчанию: 'off'
Синтаксис командной строки: CONST_RETURN_VALUE
Удар: низко

Введенный в R2020a