What is the difference between functions, which have reference to an array:
// reference to array
void f_(char (&t)[5]) {
auto t2 = t;
}
and simply array:
// just array
void f__(char t[5]) {
auto t2 = t;
}
as a parameters?
The calling code is:
char cArray[] = "TEST";
f_(cArray);
f__(cArray);
char (&rcArr)[5] = cArray;
f_(rcArr);
f__(rcArr);
In both cases t2 is char*, but in first function my VS2019 is showing that t inside function has type char(&t)[] and t inside second function has type char*.
So after all, is there any practical difference between those functions?
>Solution :
You can specify a complete array type parameter as for example
void f( int ( &a )[N] );
and within the function you will know the number of elements in the passed array.
When the function is declared like
void f( int a[] );
then the compiler adjusts the function declaration like
void f( int *a );
and you are unable to determine the number of elements in the passed array. So you need to specify a second parameter like
void f( int *a, size_t n );
Also functions with a referenced array parameter type may be overloaded. For example these two declarations
void f( int ( &a )[] );
and
void f( int ( &a )[2] );
declare two different functions.
And functions with a referenced array parameter type may be called with a braced list like for example
f( { 1, 2, 3 } );