Diejenigen von uns, die Schönheit der STL Versuch gesehen haben, so viel wie möglich zu verwenden, und auch andere dazu ermutigen, es zu benutzen, wo immer wir sie mit rohen Zeiger und Arrays sehen. Scott Meyers haben ein ganzes Buch über STL geschrieben, mit Titel Effective STL. Doch was passierte mit den Entwicklern von ifstream
, die bevorzugten char*
über std::string
. Ich frage mich, warum der erste Parameter von ifstream::open()
vom Typ const char*
statt const std::string &
ist. Bitte sehen Sie sich die Unterschrift an:Entwurf von std :: ifstream Klasse
void open(const char * filename, ios_base::openmode mode = ios_base::in);
Warum das? Warum nicht diese:
void open(const string & filename, ios_base::openmode mode = ios_base::in);
Ist dies ein schwerwiegender Fehler mit dem Design? Oder dieses Design ist bewusst? Was könnte der Grund sein? Ich sehe keinen Grund, warum sie char*
über std::string
bevorzugt haben. Beachten Sie, dass wir char*
noch an die letzte Funktion übergeben können, die std::string
übernimmt. Das ist kein Problem!
Übrigens, ich bin mir bewusst, dass ifstream
ist ein typedef, also kein Kommentar zu meinem title.:P. Es sieht kurz aus, deshalb habe ich es benutzt.
Die tatsächliche Klassenvorlage ist:
template<class _Elem,class _Traits> class basic_ifstream;
Die einzige Sache, die Ströme mit der STL haben, ist, dass beide Teil der Standardbibliothek sind. __Standard-Bibliothek! = STL .__ – sbi