Questa domanda viene da questo:matrice non decade di puntatore se passato per riferimento const in una funzione template
c++ pass array to function question
ma dal momento che il PO ha accettato una risposta credo che nessuno lo leggerà ora.
Ho provato questo codice su g ++. Sembra che l'array non decade in un puntatore quando viene passato a questa funzione (la funzione restituisce il risultato corretto):
#include <iostream>
template <typename T>
std::size_t size_of_array (T const & array)
{
return sizeof (array)/sizeof (*array);
}
int main()
{
int a [5];
std::cout << size_of_array (a) << '\n';
}
Un altro utente (sharptooth) detto che hanno lo stesso comportamento VC++ 10 con inlining off.
Qualcuno può spiegare? Grazie.
La mia ipotesi è che "T" somigli al tipo "int [5]", quindi non c'è bisogno di un decadimento su un puntatore. Ma non sono esperto. – Constantinius