I was reading about C++ and found that array to normal non const pointer conversion ( technically called as decay) don't happen when we pass array by reference. Is there any reason behind this restriction ?
I know that in C99 there are three fundamental cases array decay happens, namely:
when it's the argument of the & (address-of) operator.
when it's the argument of the sizeof operator.
When it's a string literal of type char [N + 1] or a wide string literal of type wchar_t [N + 1] (N is the length of the string) which is used to initialize an array, as in char str[] = "foo"; or wchar_t wstr[] = L"foo";.
Furthermore, in C11, the newly introduced alignof operator doesn't let its array argument decay into a pointer either.
In C++, there are additional rules, for example, when it's passed by reference.
Thanks