Expensive use of non-member std::string operator+() instead of a simple append

Не являющиеся членами 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 function, но не те, что в двух других функциях. Если функция addJunior вызывается несколько раз в цикле, создание временной строки каждый раз может быть значительной проблемой эффективности.

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

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