PDA

Visualizza la versione completa : [C++] endl; '\n'


mico
02-02-2010, 17:11
Qual è la differenza tra cout << "Ciao" <<endl ; e cout << "Ciao" << '\n' ; ?
... in entrambi i casi si va a capo dopo aver scritto "Ciao" ma cosa cambia nei due casi?

shodan
02-02-2010, 18:07
Il primo caso ingloba il secondo e chiama
cout.flush();

In pratica forza lo svuotamento del buffer di output.

mico
02-02-2010, 21:50
Per buffer di output si intende lo stream cout ?

MItaly
02-02-2010, 22:03
Si intende il buffer contenuto in cout. Tutti gli stream C++ contengono un buffer di lettura o di scrittura (a seconda del tipo di stream), in maniera tale da leggere/scrivere i dati a blocchi di dimensioni rilevanti invece che a spizzichi e bocconi come richiedono spesso le applicazioni. Nel caso degli stream di output, il buffer raccoglie i dati da scrivere fino ad una certa soglia, oltre la quale effettua la scrittura in un unico colpo. Se su cout può essere desiderabile effettuare il flushing di frequente perché l'utente veda subito quello che il programma vuole visualizzare, tuttavia scrivendo su file conviene non effettuare mai il flushing (salvo casi particolari) per migliorare le performance di scrittura. Scrivendo su file, quindi, è bene evitare endl. Nota che se l'output del programma viene rediretto su file cout di fatto punterà ad un file, per cui se il programma è usato spesso redirezionandone l'output è bene effettuare il flushing solo nei punti "strategici"; tieni conto comunque che cin e cout se non ricordo male sono in una certa misura sincronizzati, per cui quando leggi da cin, cout viene flushato in automatico.

mico
02-02-2010, 22:30
Grazie per la risposta esauriente!!! Non mi è chiaro cosa intendi per punti "strategici"... ho capito che per la scrittura su file non conviene usare il flushing per motivi di performance.... però non ho capito quali sono quei "punti strategici" in cui è meglio usare il flushing!

MacApp
03-02-2010, 01:37
Originariamente inviato da mico
però non ho capito quali sono quei "punti strategici" in cui è meglio usare il flushing!
tipo le transazioni dei DB. Insomma "flushi" su file solo quando l'informazione che stai scrivendo, nella logica del programma che stai scrivendo, è integra.

MItaly
03-02-2010, 08:24
Oppure prima di lunghi cicli di elaborazione, per cui è bene che l'utente sia messo al corrente della situazione prima di attaccare con l'elaborazione, durante la quale cout non potrebbe essere flushato.

mico
03-02-2010, 10:21
Grazie 1000 ... :ciauz:

MItaly
03-02-2010, 10:54
:ciauz:

Loading