La domanda originariamente posta era:
Perché ci sono istream e ostream in C++ visto che c'è iostream?
Prendo questa domanda per dire, "perché non è sufficiente che lo standard abbia l'intestazione ? Perché abbiamo bisogno anche delle due sottoparti, e ?"
Preferisco la mia risposta dicendo che le ragioni attuali non sono necessariamente buone ragioni nel mondo di oggi. La libreria iostream è una delle parti più vecchie della libreria standard C++, e ci sono molte cose su di essa che i membri del comitato degli standard C++ di oggi cambierebbero se potessimo ricominciare. Con questo disclaimer fuori dai piedi ci sono due ragioni principali per avere tutti e tre gli header invece di uno solo:
- Se avete bisogno solo di uno di istream o ostream, allora rallenta la vostra compilazione includerli entrambi. iostream include entrambi gli altri.
- Più importante, l'header iostream dichiara e inizializza i flussi standard, cout, cerr, clog, cin, e i loro equivalenti a caratteri larghi. Questa inizializzazione porta con sé un sacco di bagaglio (incluso il meccanismo tricky-counter usato per evitare inizializzazioni duplicate), e gioca un brutto tiro con le librerie condivise. Può essere controintuitivo, ma né istream né ostream dichiarano i flussi standard.
Il mio consiglio tipico è: Per programmi giocattolo, usate iostream. Per i componenti di programmi reali, preferite usare istream, ostream, o entrambi, a meno che non abbiate bisogno di riferirvi ad un flusso standard per nome.
EDIT: La moderazione di Quora continua ad invertire il significato di questa domanda in modo che non abbia senso. Quora moderation changed the question to:
Why isn’t there istream and ostream in C++ since there is iostream?
To which the correct answer is: There is. Always has been.