exponenta event banner

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

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

Описание

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

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

Риск

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

Кроме того, вызывающая функция может сохранять возвращаемое значение вconst объект. 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++
По умолчанию: Откл.
Синтаксис командной строки: CONST_RETURN_VALUE
Воздействие: Низкий
Представлен в R2020a