Sto scrivendo una funzione generica come di seguito.C++ sull'inizializzazione generica nei modelli
template<class Iterator, class T>
void foo(Iterator first, Iterator last) {
T a;
cout << a << endl;
// do something with iterators
}
typedef vector<double>::iterator DblPtr;
vector<double> values;
foo< DblPtr, int>();
Questa funzione stampa un valore non definito per la variabile a
, mentre se cambio l'inizializzazione in
///
T a = T()
cout << a << endl;
// do something with iterators
posso vedere che il valore inizializzato è 0
come mi aspetto.
Se chiamo T a
la variabile viene inizializzata con il valore di default, ma se chiamo T a = T()
credo che grazie all'ottimizzazione del costruttore di copia dovrebbe essere chiamato con il valore di T()
che è ancora quella di default.
Non riesco a capire qual è la differenza dietro queste 2 righe e il motivo per cui ciò accade?
grande spiegazione! Tutto chiaro ora e grazie mille. –