Почему в C++ `auto` не работает для массива внутри функции?

Перехожу с С на С++. Не могу понять почему auto не работает для массива внутри функции. С вектором все в порядке, если попробовать в main - все в порядке, а вот именно внутри функции не работает. Из-за чего?

void foo(int a[10])
{
    for (int x : a)
        std::cout << x << " ";
}

Ответы (1 шт):

Автор решения: user7860670

C++ (и С кстати тоже) не разрешает передачу массива по значению. Вместо этого тип аргумента изменяется. В этом контексте a не является массивом, а имеет тип int *. Если хотите работать с массивом - передавайте по ссылке или по указателю:

void foo(int ( & a )[10])
{
    for (int x : a)
        std::cout << x << " ";
}

А еще лучше - использовать ::std::array или array_view.

→ Ссылка