In some old code, I've come across functions declared like:
void f(int (&a)[5]);
I've been told that the array is 'naked'. What does that mean?
In some old code, I've come across functions declared like:
void f(int (&a)[5]);
I've been told that the array is 'naked'. What does that mean?
The type int (&a)[5] means "reference (named a) to an array of 5 ints". Using that type allows you to pass an array to a function without it decaying into a pointer to its first element.
Using a reference-to-array-of-5-ints instead of a pointer-to-int as your function parameter allows you to pass an array without loss of information. Things like std::begin(a) and std::end(a) will work with a reference-to-array, but not with a pointer-to-int. On the other hand, it's impossible to use a reference-to-array with a dynamically allocated array.
void f(int (&a)[5]);
Means int(&a)[5] is truly a reference to an array of size 5, and cannot be passed an array of any other size.