Преимущества списков инициализации

Что я знаю о преимуществах использования списка инициализации, так это то, что они обеспечивают эффективность при инициализации членов класса, которые не являются встроенными. Например,

Fred::Fred() : x_(whatever) { }

предпочтительнее,

Fred::Fred() { x_ = whatever; }

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

Наиболее распространенным преимуществом этого является повышение производительности. Если выражение любого типа того же типа, что и переменная-член x_, результат любого выражения создается непосредственно внутри x_ - компилятор не создает отдельную копию объекта.

С другим стилем выражение, которое вызывает создание отдельного временного объекта, и этот временный объект передается в оператор присваивания объекта x_. Затем этот временный объект разрушается в; Это неэффективно.

Вопрос
Есть ли какой-либо выигрыш в эффективности в следующем примере с использованием списка инициализации. Я думаю, что нет никакой выгоды. Первая версия вызывает конструктор копирования строки, а другая вызывает оператор присваивания строки (временные объекты не создаются). Это что правильно?

class MyClass
{
public:
    MyClass(string n):name(n) { }
private:
    string name;
};

class MyClass
{
public:
    MyClass(string n)
    {
        name=n;
    }
private:
    string name;
};

Ответы на вопрос(6)

Ваш ответ на вопрос