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

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

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