Quelli di noi che hanno visto la bellezza di STL tenta di utilizzarlo il più possibile, e anche incoraggiare gli altri ad usarlo ovunque li vediamo utilizzando puntatori prime e array. Scott Meyers ha scritto un intero libro su STL, con il titolo Effective STL. Eppure quello che è successo agli sviluppatori di ifstream
che hanno preferito char*
su std::string
. Mi chiedo perché il primo parametro di ifstream::open()
sia di tipo const char*
, anziché const std::string &
. Si prega di dare un'occhiata alla sua firma:Progettazione di classe std :: ifstream
void open(const char * filename, ios_base::openmode mode = ios_base::in);
Perché questo? Perché non questo:
void open(const string & filename, ios_base::openmode mode = ios_base::in);
Si tratta di un errore grave con il progetto? O questo design è intenzionale? Quale potrebbe essere la ragione? Non vedo alcun motivo per cui hanno preferito char*
su std::string
. Nota potremmo ancora passare char*
a quest'ultima funzione che prende std::string
. Non è un problema!
A proposito, sono a conoscenza del fatto che ifstream
è un typedef, quindi nessun commento sul mio titolo.:P. Sembra poco per questo l'ho usato.
Il modello di classe reale è:
template<class _Elem,class _Traits> class basic_ifstream;
L'unica cosa che i flussi hanno in comune con l'STL è che entrambi fanno parte della lib di std. __Standard library! = STL .__ – sbi