Ответ 1
При этом не предусмотрено никаких штрафных санкций. Возвращаемое значение построено эквивалентно
std::array<int, 3> x = { 1, 2, 3 };
Нет даже одной копии или перемещения экземпляра std::array
.
Какой механизм задействован, если при возврате типов, которые являются конструктивными из списков инициализаторов, я не указываю тип, который я возвращаю, как в:
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
?
При этом не предусмотрено никаких штрафных санкций. Возвращаемое значение построено эквивалентно
std::array<int, 3> x = { 1, 2, 3 };
Нет даже одной копии или перемещения экземпляра std::array
.
Механизм - это просто конструктор:
struct X {};
struct Y {
Y(X);
};
Y f() {
X x;
return x;
}