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?

questionAnswers(1)

yourAnswerToTheQuestion