Const return values may cause unnecessary data copies

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

Описание

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

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

Риск

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

Кроме того, вызывающая функция может хранить возвращаемое значение в не const объект. The const-ness возвращаемого значения не препятствует какой-либо операции на не 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