Jak wywołać funkcję z odwołaniem do tablicy nieznanego rozmiaru?
Rozważ prawidłowy kod:
template<size_t size>
void by_numbered_reference(int (&array)[size]);
Ta funkcja akceptuje tablicę jako argument, a kompilator może wydedukować rozmiar za pomocą dedukcji argumentów szablonów.
Teraz jest poprawne (przetestowane na Apple clang w wersji 3.0), aby zdefiniować taką funkcję:
void by_reference(int (&array)[], int size);
Który (powinien) zaakceptować odwołanie do tablicy nieznanego rozmiaru jako argument. Zauważając toint[]
iint[n]
są odrębnymi typami i ogólnie są niekompatybilne.
Jedynym sposobem, w jaki znalazłem sposób wywołania tej funkcji, jest:
int * array;
by_reference(reinterpret_cast<int(&)[]>(*array), array_size);
Dlaczego język akceptuje odwołanie do tablicy nieznanego rozmiaru jako prawidłowy argument funkcji, podczas gdy nie ma prostego sposobu na zdefiniowanie takiej zmiennej?Czy są znane przypadki użycia, w których ta składnia jest wymagana?Czemuvoid by_reference(int (*&array), int size)
powiniennie zamiast tego?