Ich schreibe eine generische Funktion wie unten.C++ über generische Initialisierung in Vorlagen
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>();
Diese Funktion druckt einen nicht definierten Wert für die Variable a
aus, während, wenn ich die Initialisierung in
///
T a = T()
cout << a << endl;
// do something with iterators
ich, dass der initialisierte Wert sehen ändern ist 0
wie ich erwarte.
Wenn ich rufe T a
die Variable mit dem Standardwert initialisiert wird, aber wenn ich T a = T()
nenne ich glaube, dass durch die Kopie Konstruktor sollte die Optimierung mit dem Wert von T()
aufgerufen werden, die eine noch die Standardeinstellung.
Ich kann nicht verstehen, was ist der Unterschied hinter diesen 2 Zeilen und der Grund, warum dies passiert?
Große Erklärung! Alles klar jetzt und vielen Dank. –