Я бы ожидал, что a
будет выведено и инициализировано как int[5]
К сожалению, это не так, как работают массивы C.Массивы распадаются на указатели.Вы не можете действительно иметь «значение массива».Если вы замените auto на выведенный тип, он будет выглядеть следующим образом:
int* a = (int[]){1, 2, 3, 4, 5};
Распад должен занять адрес, чтобы сделать указатель.
Это легко исправить с помощью ссылок, так как ссылкаВременные интервалы продлевают их время жизни:
auto&& a = (int[]){1, 2, 3, 4, 5}; // works!
Вот пример, работающий на проводнике компилятора .
Конечно, с std::array
вы получите хороший синтаксис и семантику значений:
auto a = std::array{1, 2, 3, 4, 5};