Non capisco perché l'array decada in un puntatore in una funzione modello.perché l'array decade in un puntatore in una funzione modello
Se si guarda il seguente codice: Quando il parametro è forzato a essere un riferimento (funzione f1) non decadono. Nell'altra funzione, decade. Perché il tipo di T nella funzione f non è const char (buff &) [3] ma piuttosto const char * (se ho capito bene)?
#include <iostream>
template <class T>
void f(T buff) {
std::cout << "f:buff size:" << sizeof(buff) << std::endl; //prints 4
}
template <class T>
void f1(T& buff) {
std::cout << "f:buff size:" << sizeof(buff) << std::endl; //prints 3
}
int main(int argc, char *argv[]) {
const char buff[3] = {0,0,0};
std::cout << "buff size:" << sizeof(buff) << std::endl; //prints 3
f(buff);
f1(buff);
return 0;
}
Se hai semplicemente passato un 'in t' a 'f', quindi' T' sarebbe 'int', non' int & '. Pertanto, dovresti chiedere qualcosa del tipo "Perché il tipo di T nella funzione f non è' const char [3] 'ma piuttosto' const char * '?" (notare la mancanza '&' rispetto alla risposta) –
... (seguire il mio ultimo commento). La cosa più stupida del linguaggio C/C++ è che se metti 'const char [3]' nei tuoi parametri, il compilatore lo riscriverà in modo silenzioso come 'const char *'. Questo non succede con le variabili locali, per esempio. Penso davvero che questo dovrebbe portare ad avvertimenti al giorno d'oggi (dai compilatori C++ almeno) –