exponenta event banner

Дорогостоящее использование неучастников std::string operator+() вместо простого добавления

Неучастник std::string operator+() вызывается при добавлении (или +=) метод был бы более эффективным

Описание

Этот дефект возникает при добавлении к строке с помощью функции, не являющейся членом std::string operator+(), например:

std::string s1;
s1 = s1 + "Other";

Риск

Операция:

s1 = s1 + "Other";
вызывает функцию, не являющуюся членом std::string operator+() для конкатенации строк в правой части назначения. Функция возвращает временную строку, которая затем назначается s1.

Прямой вызов функции-члена operator+=() избегает создания этой временной строки и является более эффективным.

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

Для добавления к строке используйте функцию-член operator+=(), например:

std::string s1;
s1 += "Other";
или функция-член append, например:
std::string s1;
s1.append("Other");

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

Примеры

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

#include <string>

void addJunior(std::string &name) {
    name = name + ", Jr.";
}

void addSenior(std::string &name) {
    name += ", Sr.";
}

void addDoctor(std::string &name) { 
    name.append(", MD");
}

В этом примере средство проверки помечает строку, добавляемую в addJunior функции, но не функции в двух других функциях. Если функция addJunior вызывается несколько раз в цикле, создание временной строки каждый раз может быть существенной проблемой производительности.

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

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