La definizione di Iostream in C++

Jinku Hu 12 ottobre 2023
La definizione di Iostream in C++

Questa guida illustra come utilizzare la libreria di input/output di base in C++.

Utilizza l’intestazione <iostream> per includere oggetti di flusso globale in C++

La libreria Input/Output è la parte centrale del C++ STL utilizzato da quasi tutti i programmi del mondo reale. Le operazioni di I/O C++ sono astratte sotto forma di flussi, che possono essere pensati come sequenze di dati generiche. Un’astrazione del flusso viene implementata utilizzando più classi ereditate ed è esposta all’utente come oggetti denominati diversi specializzati per determinate operazioni di I/O. Si noti che l’intera libreria di I/O basata sul flusso può essere utilizzata per stampare testo su console o leggere/scrivere dati da file sul disco. Puoi pensare alla libreria dei flussi come al mezzo principale per l’interazione del programma C++ con il file system e i dispositivi.

Le due classi di stream essenziali sono istream e ostream, corrispondenti agli stream utilizzati per leggere e scrivere i dati. Queste classi forniscono operazioni sui flussi di caratteri. Ci sono quattro oggetti stream globali frequentemente utilizzati dai programmi per condurre operazioni come prendere l’input dell’utente o stampare i messaggi di errore. Questi oggetti sono:

  • cout: rappresenta un flusso di output standard corrispondente allo stdout in C.
  • cin : è il flusso di input standard (corrisponde a stdin).
  • cerr: è il flusso di errore standard implementato come flusso non bufferizzato (corrisponde a stderr).
  • clog: è il flusso di registrazione standard che non ha l’equivalente C e offre la versione bufferizzata di cerr.

Un’altra parte importante della libreria di flussi di I/O sono gli operatori utilizzati per concatenare le operazioni tra diversi oggetti. L’operatore <<, chiamato operatore di inserimento del flusso, inserisce i dati in un oggetto del flusso. D’altra parte, l’operatore >> è noto come estrattore di flusso. Si noti che questi operatori generalmente conducono operazioni di spostamento sui tipi aritmetici, ma in questo caso vengono implementati come operatori di overload.

Nell’esempio seguente, ti mostriamo l’uso di base delle classi di I/O basate su flussi C++. Usiamo l’oggetto cout per inviare il contenuto della stringa alla console. Poiché il cout corrisponde a un flusso di output standard, utilizziamo l’operatore di inserimento per inserire i dati e di solito vengono stampati sulla console. Nota che l’oggetto endl è chiamato un manipolatore che emette un carattere di nuova riga e svuota il buffer di output.

I manipolatori di flusso sono di vari tipi, ci sono quelli che modificano l’input/output come endl, e ci sono quelli che forzano l’oggetto stream a interpretare l’input/output in modo diverso. Questi ultimi includono i manipolatori della base numerica come: dec, hex e oct.

#include <iostream>
#include <string>

using std::cerr;
using std::cout;
using std::endl;
using std::string;

int main() {
  string str1("what does iostream mean?");

  cout << str1 << endl;
  cout << str1 << " - " << str1 << endl;

  return EXIT_SUCCESS;
}

Produzione:

what does iostream mean ? what does iostream mean ? -what does iostream mean ?

Come mostrato nel programma precedente, la caratteristica più potente degli operatori di flusso e degli oggetti è di essere concatenati in sequenza più volte. In questo caso, vediamo che possiamo combinare i valori letterali con altre variabili per spingerli tutti in un flusso cout. Successivamente, utilizziamo gli oggetti cin e cerr per leggere l’input dell’utente e stampare i dati letti.

Si noti che l’oggetto del tipo che deve essere letto deve essere dichiarato in anticipo come numero float x. Un’altra proprietà utile degli operatori di inserimento/estrazione è che restituiscono il valore diverso da zero se l’operazione non è riuscita. In alternativa, puoi utilizzare le funzioni membro fail e bad per verificare se l’oggetto stream specificato ha riscontrato errori specifici.

#include <iostream>
#include <string>

using std::cerr;
using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  float x;

  cout << "enter float: ";
  if (!(cin >> x)) {
    cerr << "error while reading the floating point value!" << endl;
    return EXIT_FAILURE;
  }
  cout << x;

  return EXIT_SUCCESS;
}

Produzione:

error while reading the floating point value !
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Articolo correlato - C++ IO