Возврат механизма списка инициализаторов

Какой механизм задействован, если при возврате типов, которые являются конструктивными из списков инициализаторов, я не указываю тип, который я возвращаю, как в:

std::array<int, 3> make_array()
{
  return { 1, 2, 3 };
}

вместо

std::array<int, 3> make_array()
{
  return std::array<int, 3>{ 1, 2, 3 };
}

Существуют ли какие-либо меры по повышению производительности, если я верну список инициализаторов без указания типа? Я действительно возвращаю массив, который преобразуется в std::array?

Ответ 1

При этом не предусмотрено никаких штрафных санкций. Возвращаемое значение построено эквивалентно

std::array<int, 3> x = { 1, 2, 3 };

Нет даже одной копии или перемещения экземпляра std::array.

Ответ 2

Механизм - это просто конструктор:

struct X {};

struct Y {
    Y(X);
};

Y f() {
    X x;
    return x;
}